一尘不染

Java Maven的pom.xml中的pluginManagement是什么?

java

这是我的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启动install目标后,它们将停止工作。为什么“ pluginManagement”标签会更改构建行为?还是应该使用其他目标或选择?


阅读 1203

收藏
2020-03-01

共2个答案

一尘不染

你仍然需要添加

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

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

从Maven文档中:

pluginManagement:是在侧面插件中可以看到的元素。插件管理包含插件元素的方式几乎相同,除了它不是为该特定项目构建配置插件信息,而是要配置从此继承的项目构建。但是,这仅配置在子级的plugins元素中实际引用的插件。子级有权覆盖pluginManagement定义。

2020-03-01
一尘不染

之间的区别<pluginManagement/><plugins/>是一个<plugin/>下:

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

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

  • <pluginManagement/>如果它不是父POM,则无需在项目中包含。但是,如果它是父pom,则在孩子的pom中,你需要具有以下声明:

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

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

2020-03-01