Yup*_*ing 59 maven-2 maven-plugin maven-assembly-plugin
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
(我省略了一些与问题无关的其他内容)
到目前为止,这工作得很好,因为它创建了一个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>
Run Code Online (Sandbox Code Playgroud)
我能够包含此依赖项的唯一方法是将以下内容添加到assembly元素:
<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
</files>
Run Code Online (Sandbox Code Playgroud)
但是,这会强制我在重命名此jar时更改pom和程序集文件(如果有的话).而且,这似乎是错的.
我有试过<scope>runtime</scope>在dependencySets和<include>sourceforge.jchart2d:jchart2d</include>没有运气.
那么如何system在maven 2中将scoped jar 包含到汇编文件中?
非常感谢
Pas*_*ent 81
我没有意外添加系统范围依赖关系(毕竟,必须根据定义明确提供系统范围的依赖关系).实际上,如果您真的不想将该依赖项放在本地存储库中(例如,因为您希望将其作为项目的一部分进行分发),那么我会这样做:
我会在我pom.xml这样声明存储库:
<repositories>
<repository>
<id>my</id>
<url>file://${basedir}/my-repo</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)我只是声明没有system范围的工件,这只是麻烦的来源:
<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)我不是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>
Run Code Online (Sandbox Code Playgroud)
您可以将其粘贴到*nix shell中.在Windows上,删除" \"并将所有内容放在一行上.
小智 25
顺便说一句,你可以自动化它,并使其成为你的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>
Run Code Online (Sandbox Code Playgroud)
mc.*_*dev 15
如果你创建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>
Run Code Online (Sandbox Code Playgroud)
您也可以通过在您的dependencySet中添加补充的dependencySet来处理此问题。
<dependencySet>
<scope>system</scope>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
Run Code Online (Sandbox Code Playgroud)
最好的办法是使用存储库管理器(例如Nexus,Artifactory,Archiva),并将这种依赖项安装在特定的存储库中。之后,您可以使用诸如简单依赖之类的东西。这将简化您的生活。
文件:https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
| 归档时间: |
|
| 查看次数: |
67267 次 |
| 最近记录: |