什么是pluginManagement在Maven's pom.xml?

这是我的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”标签中时,当我启动install目标时,maven-dependency-plugin停止工作。 为什么“pluginManagement”标签会改变构建行为?或者我应该使用另一个目标或选项?< / p >
197163 次浏览

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

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

复制自:

Maven2 - pluginManagement和亲子关系的问题

你还需要做加法

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

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

来自Maven文档:

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

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

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

<pluginManagement/><plugins/>的区别在于:

  • <pluginManagement/>定义将由构建中的模块继承的插件的设置。这对于有父pom文件的情况非常有用。

  • <plugins/>是用于实际调用插件的部分。它可以继承自<pluginManagement/>,也可以不继承。

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

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

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

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

所以如果我理解得很好,我会说<pluginManagement>就像<dependencyManagement>一样,都只用于在父模块和它的子模块之间共享配置。

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

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

对吗?