298

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

4

5 に答える 5

331

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

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

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

Mavenのドキュメントから:

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

于 2012-05-07T13:49:21.903 に答える
307

<pluginManagement/>との違い<plugins/>は、<plugin/>以下のことです。

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

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

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

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

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

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

于 2012-05-07T13:59:31.500 に答える
44

を使用pluginManagementして、使用したいparent pom場合に備えて構成しますchild pomが、すべての子プラグインが使用したいわけではありません。例super pomとして、MavenJavadocプラグインのいくつかのオプションを定義する場合があります。

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

于 2012-05-07T13:49:49.423 に答える
3

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

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

からコピー:

Maven2-pluginManagementと親子関係の問題

于 2012-05-07T13:47:24.643 に答える
2

したがって、よく理解していれば、どちらも親とそのサブモジュール間で構成のみを共有するために使用されていると言え<pluginManagement>ます。<dependencyManagement>

そのために、親プロジェクトで依存関係とプラグインの共通構成を定義し、それを使用するためにサブモジュールで依存関係/プラグインを宣言するだけで済みます。構成(バージョンまたは実行、目標、等)。これは、サブモジュールの構成をオーバーライドすることを妨げるものではありませんが。

対照的<dependencies>に、<plugins>は構成とともに継承されるため、サブモジュールで再宣言しないでください。再宣言しないと、競合が発生します。

そうですか?

于 2020-08-05T15:29:28.233 に答える