11

pluginManagement親の要素を使用しpom.xmlて、そのすべての子のプラグインを構成しています。たとえば、次の構成があります。

<pluginManagement>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
            <execution>
                <id>copy-artifacts</id>
                <phase>install</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <outputDirectory>some/where/else</outputDirectory>
                    <resources>
                        <resource>
                            <directory>some/another/resource</directory>
                        </resource>
                    </resources>
                </configuration>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>install</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>deps/dir</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>
</pluginManagement>

公式ドキュメントには、構成されたプラグインを子 poms の要素にpluginManagement追加する必要があると記載されています。plugins実際、これを子 pom から削除すると:

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

その後、フェーズmaven-dependency-pluginで発火を停止します。installただし、他のいくつかのプラグイン、つまりmaven-resource-plugin. 持っていなくても

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

私の子pomでは、そのcopy-resources目標はまだinstallフェーズで起動し、構成されている作業を実行します。

なぜこの動作が存在するのですか? 常に継承されるプラグインのリストはありますか、それとも何か不足していますか?

4

2 に答える 2

10

POM 全体は表示されません。しかし、あなたが説明している行動を考えると、これは瓶、戦争、または耳ですよね?リソース プラグインは、デフォルトでこれらのパッケージ タイプに対して定義されます。これには、リソースをコピーする実行が含まれます (@maba で説明されているように)。

プラグイン定義は子 POM に含まれているため (YOU が直接そこに配置していなくても)、Maven は<pluginManagement>セクションで定義された実行を Maven によって提供された実行とマージします。

パッケージ タイプごとのデフォルトのライフサイクル バインディングを説明するドキュメントがあります。dependencyプラグインについては言及されていないことに注意してください。しかしresourcesです。それが違いを観察する理由です。で実行する-Xと、プラグインの実行が表示されます。

于 2012-10-02T13:30:43.850 に答える
1

Maven は、デフォルトで内部にあるリソースを常にコピーsrc/main/resourcesします。

Maven入門ガイドから:

Maven で採用されている単純なルールは次のとおりです。ディレクトリ内に配置されたすべてのディレクトリまたはファイル${basedir}/src/main/resourcesは、JAR のベースから始まるまったく同じ構造で JAR にパッケージ化されます。

于 2012-10-02T12:23:55.960 に答える