2017-09-13 82 views
0

Ive得到了一个多模块的Maven的设置像下面添加一个依赖,如何从一个多模块Maven项目

+- pom.xml 
+- module1/ 
    +- pom.xml 
+- module2/ 
    +- pom.xml 

module2产生一个可执行的JAR与它的依赖复制到lib/目录一起。该pom.xml此含有

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/module2/lib</outputDirectory> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>false</overWriteSnapshots> 
       <overWriteIfNewer>true</overWriteIfNewer> 
       <includeScope>runtime</includeScope> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>com.test.JksUtility</mainClass> 
      </manifest> 
      <manifestEntries> 
       <Class-Path>.</Class-Path> 
      </manifestEntries> 
     </archive> 
     <outputDirectory>${project.build.directory}/module2</outputDirectory> 
    </configuration> 
</plugin> 

的问题变得明显时module1引用module2作为依赖。在module1pom.xml包含,

<dependency> 
    <groupId>com.test</groupId> 
    <artifactId>jksutil</artifactId> 
    <version>${jksutil.version}</version> 
</dependency> 

当我尝试运行module1它告诉我,它无法找到的module2任何相关性,因为它要求所有的罐子在.m2lib/目录下。这是由于上面定义的classpathPrefix

比如我会得到下面的错误了丢失的依赖,

java.io.FileNotFoundException: /Users/test/.m2/repository/com/test/jksutil/1.2.1-SNAPSHOT/lib/argparse4j-0.7.0.jar (No such file or directory) 
    at java.util.zip.ZipFile.open(Native Method) 
    at java.util.zip.ZipFile.<init>(ZipFile.java:219) 
    at java.util.zip.ZipFile.<init>(ZipFile.java:149) 
    at java.util.jar.JarFile.<init>(JarFile.java:166) 
    at java.util.jar.JarFile.<init>(JarFile.java:130) 
    at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60) 
    at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49) 
    at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338) 
    at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288) 
    at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) 
    at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) 
    at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

反正是有解决这个除了创建脂肪/超级罐子?

回答