这是我的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停止工作。 为什么“pluginManagement”标签会改变构建行为?或者我应该使用另一个目标或选项?


pluginManagement:是一个与插件一起出现的元素。插件管理以大致相同的方式包含插件元素,只不过它不是为这个特定的项目版本配置插件信息,而是用于配置从这个版本继承的项目版本。但是,这只配置在子元素中的plugins元素中实际引用的插件。子模块完全有权利覆盖pluginManagement定义。

从http://maven.apache.org/pom.html插件% 5 fmanagement

复制自:

插件管理和父子关系的问题

你还需要做加法

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

因为pluginManagement只是一种在所有项目模块间共享相同插件配置的方法。

来自Maven文档:

pluginManagement:是一个与插件一起出现的元素。插件管理以大致相同的方式包含插件元素,只不过它不是为这个特定的项目版本配置插件信息,而是用于配置从这个版本继承的项目版本。但是,这只配置在子元素中的plugins元素中实际引用的插件。子模块完全有权利覆盖pluginManagement定义。

你可以在父pom中使用pluginManagement来配置它,以防任何子pom想要使用它,但不是每个子插件都想使用它。例如,您的超级pom为maven Javadoc插件定义了一些选项。

并不是每个子pom都想使用Javadoc,所以您可以在pluginManagement部分中定义这些默认值。想要使用Javadoc插件的子pom只定义了一个插件部分,并将从父pom中的pluginManagement定义继承配置。

<pluginManagement/>和<plugins/>之间的区别是:

<pluginManagement/>定义将由构建中的模块继承的插件的设置。这对于你有一个父pom文件并且想要避免将相同的插件配置代码复制到每个模块的情况非常有用。 <plugins/>是用于实际调用插件的部分。它可能继承自<pluginManagement/>,也可能不继承。

你不需要在你的项目中有<pluginManagement/>,如果它不是一个父POM。然而,如果它是一个父pom,那么在子pom中,你需要有这样的声明:

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

请注意,您没有定义任何配置。您可以从父项目继承它,除非您需要根据子项目的需要进一步调整调用。

如需更详细的信息,您可以查看:

Maven pom.xml参考:插件 Maven pom.xml参考:插件管理

<pluginManagement>就像<dependencyManagement>一样,都只用于在父模块和它的子模块之间共享配置。

为此,我们在父项目中定义了依赖项和插件的公共配置,然后我们只需要在子模块中声明依赖项/插件来使用它,而不需要为它定义配置(即版本或执行,目标等)。不过这并不妨碍我们重写子模块中的配置。

相反,<dependencies>和<plugins>是与其配置一起继承的,不应该在子模块中重新声明,否则会发生冲突。