在Maven中使用第三方项目作为依赖项

问题描述 投票:0回答:1

我有一个项目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依赖项解析,因为所有内容都安装在我的本地存储库中。

java maven
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.