具有依赖关系的Maven 2程序集:不包括范围“系统”下的jar我正在使用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和程序集文件(如果有的话)。而且,这似乎是错的。我有试过<scope>runtime</scope>在dependencySets和<include>sourceforge.jchart2d:jchart2d</include>没有运气。那么如何system在maven 2中将scoped jar 包含到汇编文件中?非常感谢
3 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
我没有意外添加系统范围依赖关系(毕竟,必须根据定义明确提供系统范围的依赖关系)。实际上,如果您真的不想将该依赖项放在本地存储库中(例如,因为您希望将其作为项目的一部分进行分发),那么我会这样做:
我会将依赖项放在项目本地的“文件系统存储库”中。
我会在我
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上,删除“ \
”并将所有内容放在一行上。
千万里不及你
TA贡献1784条经验 获得超9个赞
顺便说一句,你可以自动化它,并使其成为你的maven构建的一部分。以下内容将在编译之前将jar安装到本地存储库中:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <executions> <execution> <id>hack-binary</id> <phase>validate</phase> <configuration> <file>${basedir}/lib/your-lib.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>your-group</groupId> <artifactId>your-artifact</artifactId> <version>0.1</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> </executions> </plugin>
30秒到达战场
TA贡献1828条经验 获得超6个赞
如果你创建jar,我会找到简单的解决方案
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webResources> <resource> <directory>dependencies/mydep</directory> <targetPath>WEB-INF/lib</targetPath> <filtering>true</filtering> <includes> <include>**/*.jar</include> </includes> </resource> </webResources></configuration></plugin>
添加回答
举报
0/150
提交
取消