Java Maven:具有任意扩展名的输出JAR
我有一个Java项目,当对它执行Java Maven:具有任意扩展名的输出JAR,java,maven,maven-assembly-plugin,maven-jar-plugin,maven-antrun-plugin,Java,Maven,Maven Assembly Plugin,Maven Jar Plugin,Maven Antrun Plugin,我有一个Java项目,当对它执行mvn install时,它会生成一个JAR文件。到目前为止还不错 在这一代之后,我想将生成的JAR文件重命名为具有任意扩展名的文件。例如,假设生成的结果JAR名为“Foo.JAR”,我想将其重命名为“Foo.baz” 我试图确定神奇的插件组合,将允许我这样做。到目前为止,我已经尝试了以下方法,基于这样的答案: <project> ... <build> <finalName>Foo</fina
mvn install
时,它会生成一个JAR文件。到目前为止还不错
在这一代之后,我想将生成的JAR文件重命名为具有任意扩展名的文件。例如,假设生成的结果JAR名为“Foo.JAR”,我想将其重命名为“Foo.baz”
我试图确定神奇的插件组合,将允许我这样做。到目前为止,我已经尝试了以下方法,基于这样的答案:
<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>
...
福
org.apache.maven.plugins
maven antrun插件
包裹
跑
org.codehaus.mojo
构建助手maven插件
装上仪器的罐子
验证
附加工件
${project.build.directory}/${project.build.finalName}.baz
巴兹
...
所以,有两件事。首先,上面的插件似乎什么都没有做。另外,我不清楚第二个插件想要实现什么
我还尝试在汇编中独立于上面的插件来完成这项工作,但效果并不理想。我的汇编文件(注意,我没有包括插件,因为它完全是样板文件):
距离
罐子
迪尔
${project.build.directory}/${project.build.finalName}.${packaging}
${project.build.directory}
${project.build.finalName}.baz
但是,尝试运行此程序集导致:创建程序集失败:创建程序集存档区时出错:zip文件不能包含自身
所以,在这一点上,我不知所措。在谷歌搜索了大约一个小时后,我觉得ant脚本是实现这一点的方法,但我无法告诉你为什么它不起作用
非常感谢您的帮助。您可以使用将生成的文件复制或移动到一个新名称。请向Heri提供复制maven插件提示,但是,由于目前还不清楚如何设置(即使在阅读文档之后),我将在此处发布实际答案 我通过挖掘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>
com.github.goldin
复制maven插件
0.2.5
创建存档
包裹
复制
${project.build.directory}
${project.build.directory}/${project.build.finalName}.jar
${project.build.finalName}.baz
上述代码的简单之处在于,只要您指定finalName(或者即使您没有指定?我还没有测试过),它一般都适用于任何项目
享受。科迪S.答案对我来说非常有效。但是,如果您不想最终得到两个文件(*.jar和*.baz),就像在我的例子中一样,请尝试下面的maven插件,它执行“重命名”,而不是“复制”
com.coderplus.maven.plugins
它必须在maven构建周期内,还是你可以制作一个bat/sh文件来调用安装,然后重命名jar文件?为什么你需要对工件进行这样的重命名?@ns47731出于可移植性的原因,我需要它作为构建周期的一部分运行。这个插件最终对我的需要很有用,但这并不是我所说的显而易见的安排。一个简单的例子可以让您得到公认的答案。您不必指定project.build.finalName,这样就可以了。
<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>
<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>