2

Java プロジェクトをmvn install実行すると、JAR ファイルが生成されます。ここまでは順調ですね。

その生成後、結果の JAR ファイルの名前を任意の拡張子の名前に変更したいと思います。たとえば、生成された結果の JAR が「Foo.jar」と呼ばれるとします。名前を「Foo.baz」に変更したいと思います。

これを可能にする魔法のプラグインの組み合わせを確認しようとしています。これまでのところ、この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>

だから、2つのこと。まず、上記のプラグインは実際には何もしていないようです。また、2 番目のプラグインが何を達成しようとしているのかについても明確ではありません。

また、上記のプラグインとは別にアセンブリでこれを実行しようとしましたが、うまくいきませんでした。私のアセンブリファイル(プラグインは完全にボイラープレートであるため、含まれていないことに注意してください):

<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 ファイルにそれ自体を含めることはできません

だから、この時点で、私は途方に暮れています。約 1 時間のグーグル検索の後、ant スクリプトがこれに適しているという印象を受けましたが、それが機能しない理由を説明することはできませんでした。

どんな助けでも大歓迎です。

4

3 に答える 3

3

Cody S.の回答は私にとって非常にうまくいきました。ただし、私の場合のように 2 つのファイル (*.jar と *.baz) を作成したくない場合は、「コピー」ではなく「名前変更」を行う次の Maven プラグインを試してください。

<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>

他の使用例 (複数のファイル/ディレクトリのコピーおよび/または名前変更) は、次の Web サイトで入手できます: http://coderplus.github.io/copy-rename-maven-plugin/usage.html

于 2017-01-10T02:42:10.190 に答える
1

copy-maven-plugin のヒントについては Heri に感謝しますが、(ドキュメントを読んだ後でも) これを設定する方法がすぐにはわからないため、実際の回答をここに投稿します。

この例は、GitHub の問題トラッカーを掘り下げて見つけたもので、一般的にそれと格闘しています。

Sonatype aether の変更がいくつかの SO の質問に記載されているため、このコードは Maven 3.1.0 では機能しないことに注意してください。このプラグインの作成者は (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 を指定する限り (指定しない場合でも? 私はそれをテストしていません)、これはどのプロジェクトでも一般的に機能することです。

楽しみ。

于 2013-09-24T17:31:53.080 に答える