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


266

这是我的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”标签会更改构建行为?还是应该使用其他目标或选择?

Answers:


299

您仍然需要添加

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

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

从Maven文档中:

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


266

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

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

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

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

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

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

有关更多特定信息,您可以检查:


谢谢您的回复。我需要在同一pom文件中混合使用pluginManagement和plugin标签(用于maven-dependency-plugin),因为我需要绕过M2E Eclipse IDE插件的一个小错误。见stackoverflow.com/questions/8706017/...
安德烈Borgogelli Avveduti

7
谢谢!:)与<dependency/>和相同<dependencyManagement/>。您可以在部分中定义依赖项(如果需要,还可以定义它们的版本和范围)<dependencyManagement/>,然后在<dependencies/>部分中定义groupIdartifactId
carlspring 2012年

1
如果我必须执行两次插件,我应该使用插件管理吗?
Kalpesh Soni 2014年

@KalpeshSoni:这取决于-您可能希望在两个执行之间具有通用的配置,而不必重新定义。
carlspring '16

39

您可以使用pluginManagementa parent pom进行配置,以防万一有人child pom想要使用它,但并非每个子插件都想要使用它。例如,您可以super pom为Maven Javadoc插件定义一些选项。

并非每个人child pom都想使用Javadoc,因此您可以在pluginManagement部分中定义这些默认值。想要使用Javadoc插件的子pom,仅定义了一个plugin部分,并将从中的定义继承配置。pluginManagementparent pom


谢谢。我只是想在同一pom文件中混合使用pluginManagement和plugin标签,因为我需要绕过Eclipse的M2E插件的一个小错误。见stackoverflow.com/questions/8706017/...
安德烈Borgogelli Avveduti

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.