Maven:什么是pluginManagement?

这是我的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”标签会改变构build行为? 还是应该使用另一个目标或选项?

你还需要添加

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

在您的构build中,因为pluginManagement只是在所有项目模块之间共享相同插件configuration的一种方式。

从Maven文档:

pluginManagement :是一个侧边插件可见的元素。 插件pipe理包含插件元素的方式非常相似,除了不是为这个特定的项目构buildconfiguration插件信息,而是为了configuration从这个插件inheritance的项目构build。 但是,这只能configuration实际上在子节点的插件元素中引用的插件。 孩子们有权利覆盖pluginManagement定义。

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

  • <pluginManagement/>定义插件的设置,这些插件将由您的构build中的模块inheritance。 这对于有父文件夹的情况非常有用。

  • <plugins/><plugins/>的实际调用。 它可能会或可能不会从<pluginManagement/>inheritance。

如果不是父POM,则不需要在项目中拥有<pluginManagement/> 。 但是,如果是父母,那么在孩子的妈妈身上,你需要有一个声明:

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

注意你没有定义任何configuration。 您可以从父项inheritance,除非您需要根据子项目的需要进一步调整您的调用。

有关更多具体信息,您可以检查:

  • Maven pom.xml参考:插件

  • Maven pom.xml参考:插件pipe理

你可以在父pom中使用pluginManagement进行configuration,以防万一pom想要使用它,但不是每个子插件都想使用它。 一个例子可以是你的超级pom为maven Javadoc插件定义了一些选项。 不是每个孩子pom可能想要使用Javadoc,所以你在pluginManagement部分定义这些默认值。 想要使用Javadoc插件的子pom只定义了一个插件部分,并将inheritance父pom中的pluginManagement定义中的configuration。

pluginManagement:是一个侧边插件可见的元素。 插件pipe理包含插件元素的方式非常相似,除了不是为这个特定的项目构buildconfiguration插件信息,而是为了configuration从这个插件inheritance的项目构build。 但是,这只能configuration实际上在子节点的插件元素中引用的插件。 孩子们有权利覆盖pluginManagement定义。

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

复制自:

Maven2 – pluginManagement和父子关系的问题