我有一个Java项目,当在其上执行mvn install
时,会生成一个JAR文件。到目前为止一切都很好。
在那一代之后,我想将生成的JAR文件重命名为具有任意扩展名的文件。例如,假设生成的结果JAR称为“Foo.jar”,我想将其重命名为“Foo.baz”
我正在尝试确定允许我这样做的神奇插件组合。到目前为止,我已经尝试了以下内容,基于this SO回答:
<project>
...
<build>
<finalName>Foo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<copy file="${project.build.directory}/${project.build.finalName}.jar"
tofile="${project.build.directory}/${project.build.finalName}.baz" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>attach-instrumented-jar</id>
<phase>verify</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/${project.build.finalName}.baz</file>
<type>baz</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
所以,有两件事。首先,上面的插件似乎没有做任何事情。另外,我不清楚第二个插件试图完成的是什么。
我也试图在装配中与上述插件分开进行,但效果并不理想。我的汇编文件(请注意,我没有包含插件,因为它完全是样板文件):
<assembly xmlns="http://maven.apache.org/xsd/assembly"
xsi:schemaLocation="http://maven.apache.org/xsd/assembly-1.0.0.xsd">
<id>dist</id>
<formats>
<format>jar</format>
<format>dir</format>
</formats>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}.${packaging}</source>
<outputDirectory>${project.build.directory}</outputDirectory>
<destName>${project.build.finalName}.baz</destName>
</file>
</files>
</assembly>
但是,尝试运行此程序集导致:创建程序集失败:创建程序集存档时出错dist:zip文件不能包含自身
所以,在这一点上,我很茫然。经过大约一个小时的谷歌搜索,我的印象是蚂蚁脚本是这样做的方式,但我无法开始告诉你它为什么不起作用。
感谢任何帮助。
答案 0 :(得分:2)
Cody S.回答对我来说非常好。但是如果你不想最终得到两个文件(* .jar和* .baz),就像我的情况一样,试试下面的maven插件,它会重命名&#34;,而不是&#34;副本&#34;。
<plugin>
<groupId>com.coderplus.maven.plugins</groupId>
<artifactId>copy-rename-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>rename-file</id>
<phase>generate-sources</phase>
<goals>
<goal>rename</goal>
</goals>
<configuration>
<sourceFile>${project.build.directory}/${project.build.finalName}.jar</sourceFile>
<destinationFile>${project.build.finalName}.baz</destinationFile>
</configuration>
</execution>
</executions>
</plugin>
其他使用示例(复制和/或重命名多个文件/目录)可在其网站上找到: http://coderplus.github.io/copy-rename-maven-plugin/usage.html
答案 1 :(得分:1)
您可以使用copy-maven-plugin将生成的文件复制或移动到新名称。
答案 2 :(得分:1)
给Heri提供了复制maven-plugin技巧的提示,但是,由于现在并不是很明显如何进行设置(即使阅读完文档后),我也会在这里发布实际答案。
我通过挖掘GitHub问题跟踪器找到了这个例子,并且经常与之抗争。
请注意,此代码在Maven 3.1.0上不起作用,因为在几个SO问题中记录了Sonatype以太变化。这个插件的作者声称(截至2013年8月)下一个版本(显然3.0版)将支持Maven 3.1.0
无论如何,插件应配置如下:
<plugin>
<groupId>com.github.goldin</groupId>
<artifactId>copy-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
<execution>
<id>create-archive</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<resources>
<resource>
<targetPath>${project.build.directory}</targetPath>
<file>${project.build.directory}/${project.build.finalName}.jar</file>
<destFileName>${project.build.finalName}.baz</destFileName>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
上述代码的简洁之处在于,只要你指定一个finalName(或者即使你没有指定它?我还没有测试过),这应该适用于任何项目。
享受。