web-dev-qa-db-ja.com

Mavenのpom.xmlのpluginManagementとは何ですか?

これは私のpomファイルの断片です。

....
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

コマンドでうまく使います

mvn install

しかし、それを "pluginManagement"タグに入れようとすると、installゴールを起動するとmaven-dependency-pluginが機能しなくなります。 "pluginManagement"タグがビルドの動作を変えるのはなぜですか?それとも別の目標や選択肢を使うべきですか?

あなたはまだ追加する必要があります

<plugins>
    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>

pluginManagementはすべてのプロジェクトモジュールで同じプラグイン設定を共有するための手段にすぎないためです。

Mavenのドキュメントから:

pluginManagement:サイドプラグインに沿って見られる要素です。プラグイン管理には、この特定のプロジェクトビルドのプラグイン情報を設定するのではなく、これを継承したプロジェクトビルドを設定することを目的としている点を除いて、ほぼ同じ方法でプラグイン要素が含まれています。ただし、これは子のplugins要素内で実際に参照されるプラグインのみを構成します。子はpluginManagement定義をオーバーライドするすべての権利を持ちます。

264
jordeu

<pluginManagement/><plugins/>の違いは、<plugin/>は以下のところにあります。

  • <pluginManagement/>はあなたのビルドのモジュールによって継承されるプラグインの設定を定義します。これは親のpomファイルがある場合に最適です。

  • <plugins/>はプラグインの実際の呼び出しです。 <pluginManagement/>から継承される場合と継承されない場合があります。

親POMでない場合は、プロジェクトに<pluginManagement/>を含める必要はありません。しかし、もしそれが親のpomであれば、それから子のpomの中では、次のような宣言が必要です。

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

どの設定も定義していないことに注意してください。子プロジェクトのニーズに従って呼び出しをさらに調整する必要がない限り、親から継承することができます。

より具体的な情報については、あなたはチェックすることができます:

216
carlspring

子pomがそれを使用したい場合に備えて、それを設定するために親pomでpluginManagementを使用しますが、すべての子プラグインがそれを使用したいとは限らない。例としては、あなたのスーパーポムがMaven Javadocプラグインのためのいくつかのオプションを定義していることがあります。それぞれの子pomがJavadocを使いたくない場合があるので、pluginManagementセクションでこれらのデフォルトを定義します。 Javadocプラグインを使用したい子pomは、プラグインセクションを定義するだけで、親pomのpluginManagement定義から設定を継承します。

33
Wim Deblauwe

pluginManagement:サイドプラグインに沿って見られる要素です。プラグイン管理には、この特定のプロジェクトビルドのプラグイン情報を設定するのではなく、これを継承したプロジェクトビルドを設定することを目的としている点を除いて、ほぼ同じ方法でプラグイン要素が含まれています。ただし、これは子のplugins要素内で実際に参照されるプラグインのみを構成します。子はpluginManagement定義をオーバーライドするすべての権利を持ちます。

から http://maven.Apache.org/pom.html#Plugin%5FManagement

コピー元:

Maven 2 - pluginManagementと親子関係の問題

3
ant