我有一个项目A取决于项目B.我从git repo下载了项目B,我在项目B中运行了“mvn package”和“mvn install”,所以我在〜/ .m2 / repository中有它。目录
我尝试使用“jar-with-dependencies”打包项目A并且它运行良好,但我不想要一个包含所有依赖项的大jar。
当我说出来时:
<dependency>
<groupId>ch.usi.da</groupId>
<artifactId>paxos</artifactId>
<version>trunk</version>
</dependency>
命令“mvn package”工作正常,但是当我尝试运行它时:
java -cp target/basecast-1.0-SNAPSHOT.jar ar.uba.dc.basecast.App
我在线程“main”中遇到了一个异常java.lang.NoClassDefFoundError:ch / usi / da / paxos / Util 错误。
我只使用maven,而不是使用Eclipse。我想保持简单并了解幕后发生的事情,也许Eclipse以更好的方式管理类路径,但我想在没有它的情况下完成它。
更新:我忘了提到这个第三方项目B有很多依赖项,所以包含它的.jar文件作为“lib”不是我理想的解决方案。我想使用maven依赖项解析,因为所有内容都安装在我的本地存储库中。
答案 0 :(得分:0)
如果您不想要一个胖罐(可能有很多原因),您必须首先确定要使用哪种其他机制来提供启动应用程序的方法。通常,您可以创建一个可执行jar,其中Class-Path条目指向您使用的所有工件,或者创建一个可以执行各种健全技巧的shell脚本,然后组装一个指向您使用的所有工件的类路径变量,或者 - 在MacOS上 - 打包应用程序。高级部署可能包括WebStart。
目前技能水平的一个好解决方案是使用具有以下坐标的appassembler-maven-plugin:
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
使用适当的配置部分可以创建所需的脚本(在Unix和Windows上),将您使用的工件放在正确的位置,所有这些都是普通Maven构建的一部分。
参见http://www.mojohaus.org/appassembler/appassembler-maven-plugin/assemble-mojo.html 完整的说明。