我正在使用maven程序集插件生成一个.tar
文件,其中包含几个其他文件,依赖的jar。所有文件都正确地复制到配置assembly.xml
中的给定文件夹。
我想在最终的tar文件中包含原始项目jar,但目前还没有看到它。
发布assembly:single
目标时,我收到以下消息:
[警告]不能包含项目工件:com.my.newpkg.project1:jar:0.0.3.0;它没有相关的文件或目录。
在读完SO之后,似乎在pom.xml
添加以下配置应该添加jar,但仍然没有得到预期的结果。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.my.newpkg.project1.MainClass</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<formats>
<format>dir</format>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<excludes>
<exclude>junit:junit</exclude>
</excludes>
<fileMode>0755</fileMode>
</dependencySet>
</dependencySets>
那么,配置还不正确?还是我错过了什么?
我们如何将当前项目jar添加到最终的tar
中答案 0 :(得分:44)
在<dependencySet>
中,您可以通过说<useProjectArtifact>false</useProjectArtifact>
来排除当前项目jar,但默认情况下这是正确的,因此它应该有效。
从警告中,我猜你先忘了mvn package
,所以目标目录中没有jar。
或者在一个命令中执行mvn package assembly:single
。
或者,在你的pom中添加maven-assembly-plugin并将其绑定到'package'阶段,以便它在mvn package
上自动触发:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>tar-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>etc/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>