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和父子关系的问题