我正在使用 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>
我能够包含此依赖项的唯一方法是将以下内容添加到程序集元素:
<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
</files>
但是,这迫使我在重命名此 jar 时更改 pom 和程序集文件(如果有的话)。而且,这似乎是错误的。
我在
<scope>runtime</scope>
和 dependencySets
中尝试了 <include>sourceforge.jchart2d:jchart2d</include>
没有运气。那么如何在 maven 2 的程序集文件中包含一个
system
范围的 jar 文件呢?非常感谢
最佳答案
我对没有添加系统范围依赖项并不感到惊讶(毕竟,必须通过定义明确提供具有系统范围的依赖项)。实际上,如果您真的不想将该依赖项放在本地存储库中(例如,因为您想将其作为项目的一部分进行分发),那么我会这样做:
pom.xml
中声明该存储库:<repositories>
<repository>
<id>my</id>
<url>file://${basedir}/my-repo</url>
</repository>
</repositories>
system
范围的工件,这只是麻烦的根源:<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
</dependency>
我不是 100% 确定这会满足您的需求,但我认为这是比使用系统范围更好的解决方案。
更新: 我应该在我原来的答案中提到过,我现在正在修复它。要在基于文件的存储库中安装第三方库,请使用
install:install-file
和 localRepositoryPath
参数:mvn install:install-file -Dfile=<path-to-file> \
-DgroupId=<myGroup> \
-DartifactId=<myArtifactId> \
-Dversion=<myVersion> \
-Dpackaging=<myPackaging> \
-DlocalRepositoryPath=<path-to-my-repo>
您可以将其按原样粘贴到 *nix shell 中。在 Windows 上,删除“
\
”并将所有内容放在一行中。关于maven-2 - 具有依赖项 : jar under scope "system" not included 的 Maven 2 程序集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2065928/