I have two projects and would like to link dependency between one project to another.
In my first project with following pom.xml file:
<artifactId>project1</artifactId>
<name>Project 1</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>${maven-antrun-plugin.version}</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<copy todir="${basedir}/../bin">
<fileset dir="${basedir}/target/">
<include name="*.jar" />
</fileset>
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
And in my second project I would like to reuse the opencsv dependency which already defined in the first project so I did following in the pom file of my second project:
<artifactId>project2</artifactId>
<name>Project 2</name>
<packaging>jar</packaging>
<properties>
<parent-job-artifactId>project1</parent-job-artifactId>
<parent-job.version>1.0.0-SNAPSHOT</parent-job.version>
</properties>
<dependencies>
<dependency>
<groupId>com.customer</groupId>
<artifactId>${parent-job-artifactId}</artifactId>
<version>${parent-job.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${parent-job-artifactId}-${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>${maven-antrun-plugin.version}</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<copy todir="${basedir}/../bin">
<fileset dir="${basedir}/target/">
<include name="*.jar" />
</fileset>
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
In the implementation of the second project, I can still call the methods in opencsv library but when I run it, it threw NoClassDefFoundError:
Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: com/opencsv/CSVWriter at com.customer.project2(ExportCommonExtension.java:41) at com.customer.project1.doExportCommon(ExportJob.java:95) at com.customer.project1.executeTask(ExportJob.java:55) at com.customer.project1.StartWork.run(Job.java:135) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.opencsv.CSVWriter at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:151) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more
Did I miss something in my pom xml file? Does anyone has an idea how to fix it? Thank you in advanced!