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


266

これは私の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」タグで囲もうとするとmaven-dependency-plugininstallゴールを起動すると機能が停止します。「pluginManagement」タグがビルド動作を変更するのはなぜですか?または、別の目標やオプションを使用する必要がありますか?

回答:


299

追加する必要があります

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

これは、pluginManagementすべてのプロジェクトモジュールで同じプラグイン構成を共有するための方法にすぎないためです。

Mavenドキュメントから:

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


266

違い<pluginManagement/>とは<plugins/>つまり<plugin/>下:

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

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

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

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

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

より具体的な情報については、以下を確認できます。


お返事ありがとうございます。M2E Eclipse IDEプラグインの小さなバグをバイパスする必要があるため、同じpomファイルでpluginManagementとプラグインタグ(maven-dependency-plugin用)を混在させる必要があります。stackoverflow.com/questions/8706017/…を
Andrea Borgogelli Avveduti

7
ありがとう!:)これは<dependency/>およびと同じです<dependencyManagement/>。(必要であれば、そのバージョンおよびスコープと一緒に)あなたには依存関係を定義する<dependencyManagement/>セクションと、その後に<dependencies/>セクションあなただけの定義groupIdartifactId
carlspring 2012

1
プラグインを2回実行する必要がある場合、pluginmanagementを使用する必要がありますか?
Kalpesh Soni 2014

@KalpeshSoni:状況によって異なります。2つの実行間で、再定義する必要のない共通の構成が必要になる場合があります。
carlspring 2016年

39

すべての子プラグインがそれを使用することを望んでいない場合に使用するためpluginManagementに、parent pomを使用して構成しますchild pom。例としては、super pom、maven Javadocプラグインのいくつかのオプションを定義。

それぞれchild pomがJavadocを使用したくない場合があるため、pluginManagementセクションでこれらのデフォルトを定義します。Javadocプラグインを使用する子pomは、プラグインセクションを定義し、の定義から構成を継承します。pluginManagementparent pom


ありがとうございました。EclipseのM2Eプラグインの小さなバグをバイパスする必要があるため、同じpomファイルでpluginManagementとプラグインタグを混在させようとしています。stackoverflow.com/questions/8706017/…を
Andrea Borgogelli Avveduti

3

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

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

からコピー:

Maven2-pluginManagementと親子関係の問題

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.