我同时使用程序集和jar插件来部署我的应用程序。我还使用jar插件帮助我在清单文件中生成类路径
<addClasspath>true</addClasspath>虽然这看起来很有效,但当我尝试执行jar (它指定了一个适当的主类)时,问题就来了-它将无法定位实际上是可传递依赖的库。因此,我的项目A依赖于项目B,项目B依赖于jar C。程序集插件将正确地压缩A、B和C,但是jar插件没有在清单中包含C,从而导致了ClassNotFoundException。
我在maven-jar-plugin中没有看到任何可以让我指定需要传递依赖的选项。
我做得对吗?还有谁设法将生成的传递依赖项添加到清单中?也许我做错了什么或做错了什么。感谢您的帮助。
发布于 2009-07-06 13:00:29
我设法解决了通过...而不是真正的解决它。我仔细检查了一下,仍然不知道为什么一些传递依赖没有被拾取-它似乎跳过了它们,它们最终没有生成到清单中。
我仔细研究了一下,使用了maven-dependency plugin。令人惊讶的是,配置<attach>true</attach>并将其绑定到assembly:assembly阶段解决了类路径问题。
发布于 2009-07-06 11:08:06
我试着解决了上面提到的问题。在我的例子中,它起作用了(maven-jar-plugin v2.2)。我有一个名为jarloading的父项目,它有3个childs:
调用后
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>
...项目的pom.xml:
...
<dependencies>
<dependency>
<groupId>ch.fiftynine.lab</groupId>
<artifactId>b</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...B项目的pom.xml并不包含什么特别的东西。
以及附带的源代码和二进制文件:source code binaries
发布于 2009-08-13 19:53:09
我不能让maven-jar-plugin工作,我必须使用maven-assembly-plugin。
示例:
的那个
https://stackoverflow.com/questions/1086051
复制相似问题