Maven 2 maven jar插件和可传递依赖项
我使用汇编和jar插件来部署我的应用程序。我还使用jar插件来帮助我使用Maven 2 maven jar插件和可传递依赖项,maven-2,assemblies,jar,classpath,maven-plugin,Maven 2,Assemblies,Jar,Classpath,Maven Plugin,我使用汇编和jar插件来部署我的应用程序。我还使用jar插件来帮助我使用 <addClasspath>true</addClasspath> true 虽然这似乎是可行的,但当我尝试执行jar(它指定了一个适当的主类)时,问题就出现了——它将无法找到一个实际上是可传递依赖项的库。因此,我的项目A依赖于项目B,项目B依赖于jar C。程序集插件将正确地压缩A、B和C,但jar插件没有在清单中包含C,导致ClassNotFoundException 我在maven jar
<addClasspath>true</addClasspath>
true
虽然这似乎是可行的,但当我尝试执行jar(它指定了一个适当的主类)时,问题就出现了——它将无法找到一个实际上是可传递依赖项的库。因此,我的项目A依赖于项目B,项目B依赖于jar C。程序集插件将正确地压缩A、B和C,但jar插件没有在清单中包含C,导致ClassNotFoundException
我在maven jar插件中没有看到任何选项可以让我指定需要传递依赖项
我这样做对吗?还有人设法将可传递依赖项生成到清单中吗?也许我做错了什么,或者是不正常。感谢您的帮助。我试图解决上述问题。在我的例子中,它起作用了(maven jar插件v2.2)。 我有一个名为jarloading的父项目,它有3个孩子:
- main:依赖于
- a:依赖于b
- b:依赖于a
打完电话
mvn package
使用包含
rm -r ~/Desktop/jarloading-bin
mkdir ~/Desktop/jarloading-bin
cp a/target/a-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp b/target/b-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp main/target/main-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
更改为目录
cd ~/Desktop/jarloading-bin
跑步
java -jar main-0.0.1-SNAPSHOT.jar
它工作得很好
但实际上问题是,类路径如何列在清单文件中:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: rschmid
Build-Jdk: 1.6.0_07
Main-Class: Main
Class-Path: a-0.0.1-SNAPSHOT.jar b-0.0.1-SNAPSHOT.jar
主项目的pom.xml:
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>Main</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>ch.fiftynine.lab</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
。。。
我试图解决上面提到的问题。在我的例子中,它起作用了(maven jar插件v2.2)。
我有一个名为jarloading的父项目,它有3个孩子:
- main:依赖于
- a:依赖于b
- b:依赖于a
打完电话
mvn package
使用包含
rm -r ~/Desktop/jarloading-bin
mkdir ~/Desktop/jarloading-bin
cp a/target/a-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp b/target/b-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp main/target/main-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
更改为目录
cd ~/Desktop/jarloading-bin
跑步
java -jar main-0.0.1-SNAPSHOT.jar
它工作得很好
但实际上问题是,类路径如何列在清单文件中:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: rschmid
Build-Jdk: 1.6.0_07
Main-Class: Main
Class-Path: a-0.0.1-SNAPSHOT.jar b-0.0.1-SNAPSHOT.jar
主项目的pom.xml:
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>Main</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>ch.fiftynine.lab</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
。。。
我通过。。。实际上并没有解决它。我仔细检查了一下,仍然不知道为什么一些可传递的依赖项没有被提取出来——似乎跳过了其中的一个,它们最终没有被生成到清单中
我仔细研究了一下maven依赖插件。令人惊讶的是,配置true
并将其绑定到assembly:assembly
阶段解决了类路径问题。。。实际上并没有解决它。我仔细检查了一下,仍然不知道为什么一些可传递的依赖项没有被提取出来——似乎跳过了其中的一个,它们最终没有被生成到清单中
我仔细研究了一下maven依赖插件。令人惊讶的是,配置true
并将其绑定到assembly:assembly
阶段解决了类路径问题。我无法让maven jar插件工作,我不得不使用maven assembly插件
示例:
- (这就是我所遵循的)
我无法让maven jar插件工作,我不得不使用maven汇编插件
示例:
- (这就是我所遵循的)
对于找到此答案的任何其他人,我相信它不会添加标记为可选(如果未找到)或标记为提供范围的依赖项。对于找到此答案的任何其他人,我相信它不会添加标记为可选(如果未找到)或标记为提供范围的依赖项。