[英]What is pluginManagement in 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”标签会改变构建行为? 或者我应该使用另一个目标或选项吗?
您仍然需要添加
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
</plugins>
在您的构建中,因为pluginManagement
只是在所有项目模块中共享相同插件配置的一种方式。
来自 Maven 文档:
pluginManagement : 是一个与插件一起看到的元素。 插件管理以大致相同的方式包含插件元素,除了不是为此特定项目构建配置插件信息,而是旨在配置从该项目构建继承的项目构建。 但是,这仅配置在子项的 plugins 元素中实际引用的插件。 孩子们有权覆盖 pluginManagement 定义。
<pluginManagement/>
和<plugins/>
之间的区别在于一个<plugin/>
在:
<pluginManagement/>
定义插件的设置,这些插件将由构建中的模块继承。 这对于您有父 pom 文件的情况非常有用。
<plugins/>
是用于实际调用插件的部分。 它可能继承自<pluginManagement/>
,也可能不继承。
如果它不是父 POM,则您的项目中不需要<pluginManagement/>
。 但是,如果它是父 pom,那么在子 pom 中,您需要有如下声明:
<plugins>
<plugin>
<groupId>com.foo</groupId>
<artifactId>bar-plugin</artifactId>
</plugin>
</plugins>
请注意您没有定义任何配置。 您可以从父项继承它,除非您需要根据子项目的需要进一步调整您的调用。
有关更具体的信息,您可以查看:
你在parent pom
使用pluginManagement
来配置它,以防任何子child pom
想要使用它,但不是每个子插件都想使用它。 例如,您的super pom
为 maven Javadoc 插件定义了一些选项。
并非每个child pom
可能想要使用 Javadoc,因此您可以在pluginManagement
部分中定义这些默认值。 想要使用 Javadoc 插件的子 pom 只需定义一个插件部分,并将从parent pom
的pluginManagement
定义继承配置。
pluginManagement:是一个与插件一起看到的元素。 插件管理以大致相同的方式包含插件元素,除了不是为此特定项目构建配置插件信息,而是旨在配置从该项目构建继承的项目构建。 但是,这仅配置在子项的 plugins 元素中实际引用的插件。 孩子们有权覆盖 pluginManagement 定义。
来自http://maven.apache.org/pom.html#Plugin%5FManagement
复制自:
因此,如果我理解得很好,我会说<pluginManagement>
就像<dependencyManagement>
都用于仅共享父模块与其子模块之间的配置。
为此,我们在父项目中定义了依赖项和插件的通用配置,然后我们只需在子模块中声明依赖项/插件即可使用它,而无需为其定义配置(即版本或执行、目标、等等)。 虽然这并不能阻止我们覆盖子模块中的配置。
相比之下, <dependencies>
和<plugins>
是和它们的配置一起继承的,不应该在子模块中重新声明,否则会发生冲突。
那正确吗 ?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.