Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven:具有任意扩展名的输出JAR_Java_Maven_Maven Assembly Plugin_Maven Jar Plugin_Maven Antrun Plugin - Fatal编程技术网

Java Maven:具有任意扩展名的输出JAR

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

我有一个Java项目,当对它执行
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>