11

pluginManagement在父级中使用 elementpom.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>

官方文档指出,pluginManagement仍然必须将配置的插件添加到plugins子 pom 中的元素中。事实上,如果我从子 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 中(即使您没有直接将它放在那里),Maven 将在该<pluginManagement>部分中定义的执行与 Maven 提供的执行合并。

有按包装类型描述默认生命周期绑定的文档。注意dependency插件没有被提及;但是resources是;这就是你观察差异的原因。运行-X将显示插件执行。

于 2012-10-02T13:30:43.850 回答
1

src/main/resources默认情况下,Maven 总是复制内部的资源。

来自Maven 入门指南

Maven 采用的简单规则是:任何目录或放置在该${basedir}/src/main/resources目录中的文件都打包在您的 JAR 中,并且从 JAR 的基础开始具有完全相同的结构。

于 2012-10-02T12:23:55.960 回答