2

こんにちは、プロジェクトのイメージを圧縮するためのアセンブリを作成し、それを pom ファイルのパッケージ フェーズにフックしました。ここでの問題は、「クリーン コンパイル パッケージ」を実行すると、必要な zip ファイルとファイル -jar- が作成されることです。作成したくないwith-dependencies.jar。このjarファイルの生成を抑制するにはどうすればよいですか

これが私のポンです

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <inherited>false</inherited>
    <configuration>
        <descriptors>
            <descriptor>
                src/main/assembly/cat_image_resources_assembly.xml
            </descriptor>
        </descriptors>
    </configuration>
    <executions>
      <execution>
        <id>cat_image_resources</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
            <!-- appendAssemblyId>false</appendAssemblyId>
            <Change the name to standard name >
            <finalName>renameImages</finalName-->
        </configuration>
      </execution>
    </executions>
</plugin>

アセンブリ ファイル cat_image_resources_assembly.xml

<assembly>
<id>cat_image_resources</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<baseDirectory>${artifactId}</baseDirectory>
<fileSets>
    <fileSet>
        <directory>exportedImages</directory>
        <outputDirectory/>
        <fileMode>644</fileMode>
    </fileSet>
</fileSets>
</assembly>

次のファイルを生成しています

CATImageExport2-1.0-SNAPSHOT-cat_image_resources.zip (5 MB が必要)、CATImageExport2-1.0-SNAPSHOT-jar-with-dependencies.jar (58 MB これは、生成を除外したい依存関係にあります)

4

4 に答える 4

1

ここでの問題は、「クリーン コンパイル パッケージ」を実行すると、作成したくないファイル -jar-with-dependencies.jar とともに必要な zip ファイルが作成されることです。

通常、事前定義された記述子を使用すると、-jar-with-dependencies.jarファイルが作成されます。jar-with-dependenciesあなたが提供したスニペットはそのようなものを表示せず、期待どおりに動作します(テストPOMに貼り付けた後):

$ ls ターゲット
archive-tmp Q4068706-1.0-SNAPSHOT-cat_image_resources.zip テストクラス
クラス Q4068706-1.0-SNAPSHOT.jar
maven-archiver 確実なレポート

mvn help:effective-pom指定した XML スニペットが期待どおりに機能するため、親 POM からプラグイン構成を継承していないことを再確認してください (たとえば、 を使用)。

于 2010-11-02T12:41:48.097 に答える
0

依存関係の jar ファイルを作成するアセンブリ プラグインであると確信していますか?

それは、アセンブリ プラグインが指定どおりに動作しているように見えるからです。ただし、プロジェクトの pom.xml ファイルをもっと見ることなく、プロジェクトの pom.xml ファイルに別のプラグインがないこと、または依存関係の jar ファイルを作成している可能性のある親の pom.xml ファイルでさえないことを除外することはできません。

于 2010-11-01T15:14:46.220 に答える
0

Mavenが行っているすべての構成継承に関するKevinの回答に追加することはあまりありません。ただし、親 POM を (その動作に影響を与えずに) 変更できる場合、1 つのオプションは次のとおりです。

  1. 親で、「デフォルト」の <execution> の <configuration> 要素で jar-with-dependencies にリンクする <descriptorRefs> 要素を定義します。つまり、プラグインの <configuration> の一部ではありません。
  2. 子では、「デフォルト」の <execution> をスキップし (依存関係のある jar を無効にします)、独自の <execution> をその <configuration> とともに追加します。

この例は、次の場所にあります。

https://github.com/demobox/jar-with-deps-vs-spi/blob/master/pom.xml

そこでは、デフォルトは子 POM ではなく「with-services-handler」プロファイルでオーバーライドされますが、メカニズムは同じである必要があります。

于 2011-07-25T18:55:58.030 に答える
0

re:「親の pom 定義をオーバーライドする方法はありますか?つまり、親の pom 定義を無視して、jar-with-dependencies が私の pom に干渉しないように独自の記述子を持っていることを意味します。」

私は過去にこれを少しいじりましたが、私がやりたいことをうまくやることができませんでした。短い答えは「いいえ」だと確信していますが、私が試したことについて詳しく説明します。

  1. それぞれが一意の ID と構成を持つ 2 つの実行で、アセンブリ プラグインの pluginManagement エントリを作成しました。次に、プラグイン セクションのアセンブリ プラグインに、実行したい実行の ID と一致する ID を持つ 1 つの実行のみを含む実行セクションを追加しました。それはまだ両方を実行しました。

  2. 一意の ID と構成を持つ 1 つの実行で、アセンブリ プラグインの pluginManagement エントリを作成しました。次に、プラグイン セクションで、1 つの実行と異なる ID と構成を使用して、アセンブリ プラグインのエントリを作成しました。それはまだ両方を実行しました。

  3. 一意の ID と構成を持つ 1 つの実行で、アセンブリ プラグインの pluginManagement エントリを作成しました。次に、プラグイン セクションで、1 つの実行と同じ ID を持つアセンブリ プラグインのエントリを作成し、今回はまったく異なる構成を指定しました。明らかに 2 つの構成がマージされ、両方の構成の結果が生成されました。注: pluginManagement セクションの構成は記述子エントリを使用し、plugins セクションの構成は descriptorRef エントリを使用しました。plugins セクションの構成に空の記述子エントリを追加しようとしましたが、pluginManagement セクションで指定された記述子の使用法を上書きする (そして本質的に消去する) ことを望んでいましたが、そのような運はありませんでした。

Maven は常に親プラグインを子プラグインとマージし、本質的に何も上書きせず、一致するタグを貪欲にマージすると信じています (より多くのことがより良い哲学であるため、別のタグのサブ要素よりも 1 つのタグのサブ要素を選択しません)。

哲学に関する限り、アセンブリ プラグインはカスタム アーティファクトの構築を支援するためにあります (Maven では、ソース分類子などを数えずに、各プロジェクトが 1 つのメイン アーティファクトを生成する必要があります)。そのため、複数の子がアセンブリ プラグインを使用する必要がある場合は、それらすべてに共通するものだけを親 pom に入れます。すべての maven-assembly-plugin 構成/実行に共通するものが何もない場合は、アセンブリ プラグイン構成を各子プロジェクトに移動する必要があると思います。

于 2010-11-04T23:42:07.500 に答える