我正在使用maven-assembly插件来创建我的应用程序的jar,包括它的依赖项如下:
<assembly>
<id>macosx</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
(我省略了一些与问题无关的其他内容)
到目前为止,这工作正常,因为它创建了一个包含所有依赖项的 lib
目录 . 但是,我最近添加了一个新的依赖项,其范围是 system
,并且它不会将其复制到 lib
输出目录 . 我必须在这里遗漏一些基本的东西,所以我请求帮助 .
我刚刚添加的依赖项是:
<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/jchart2d-3.1.0.jar</systemPath>
</dependency>
我能够包含此依赖项的唯一方法是将以下内容添加到assembly元素:
<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
</files>
但是,这会强制我在重命名此jar时更改pom和程序集文件(如果有的话) . 而且,这似乎是错的 .
我在 dependencySets
和 <include>sourceforge.jchart2d:jchart2d</include>
尝试了 <scope>runtime</scope>
没有运气 .
那么如何在maven 2中的程序集文件中包含一个 system
范围的jar?
非常感谢
7 回答
它在我的解决方案上以更简单的方式工作:
从您的依赖项中删除:
然后在pom.xml中添加maven-install-plugin .
我并不感到惊讶,因为没有添加系统范围依赖关系(毕竟,必须根据定义明确提供系统范围的依赖关系) . 实际上,如果您真的不想将该依赖项放在本地存储库中(例如,因为您希望将其作为项目的一部分进行分发),那么我会这样做:
我会将依赖项放在项目的"file system repository" local中 .
我会在
pom.xml
中声明该存储库,如下所示:system
范围的工件,这只是麻烦的来源:我不是100%确定这将满足您的需求,但我认为这是比使用系统范围更好的解决方案 .
Update: 我应该在原来的答案中提到我现在正在修理它 . 要在基于文件的存储库中安装第三方库,请将
install:install-file
与localRepositoryPath参数一起使用:您可以将其粘贴到* nix shell中 . 在Windows上,删除“
\
”并将所有内容放在一行上 .顺便说一句,你可以自动化它,并使其成为你的maven构建的一部分 . 以下内容将在编译之前将jar安装到本地存储库中:
如果你创建jar,我会找到简单的解决方案
您还可以通过在dependencySets中添加补充dependencySet来处理此问题 .
最好的方法是使用Repository Manager(如Nexus,Artifactory,Archiva)并在特定的存储库中安装这种依赖 . 之后,您可以使用简单依赖项之类的东西 . 这将简化您的生活 .
文件:https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
一个简单的解决方案是将其添加到本地maven存储库中
一种方法是通过上一篇文章中建议的mvn install命令 .
另一个简单的方法是,1)在你的eclipse中右键单击项目选择Maven选项 . 2)选择“安装或将工件部署到maven存储库”选项,然后单击“下一步” . 3)单击Artifact文件复选框旁边的浏览并选择你的jar文件4)输入GroupId和ArtifactId并确保版本确保生成pom和create校验和,并且打包是jar
点击完成,Wallah!你的工作已经完成,jar被添加到你的本地存储库中,你可以在settings.xml或m2目录中定义
现在只需按照导入输入的GroupId,ArtifactId和jar版本添加简单的maven依赖项,即外部jar将由maven打包 .
编辑:对不起,我没有意识到alx也提到了清洁生命周期的解决方法 .
根据alx提供的解决方案,您可以在清洁阶段执行安装文件步骤 . 但由于清洁阶段不在默认生命周期中,因此必须在第一次执行
mvn clean
以确保jar在本地仓库中准备就绪 .例如:mvn clean; mvn包