Maven:什么是pluginManagement?

And*_*uti 242 java build pom.xml maven maven-dependency-plugin

这是我的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>
...
Run Code Online (Sandbox Code Playgroud)

我在命令中成功使用它

mvn install
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将其封装到"pluginManagement"标签中时,maven-dependency-plugin当我启动install目标时停止工作.为什么"pluginManagement"标签会改变构建行为?或者我应该使用其他目标或选项?

jor*_*deu 279

你还需要添加

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)

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

来自Maven文档:

pluginManagement:是一个沿侧插件看到的元素.插件管理以大致相同的方式包含插件元素,除了不是为这个特定的项目构建配置插件信息,它旨在配置从这个继承的项目构建.但是,这仅配置在子节点的plugins元素中实际引用的插件.孩子们有权重写pluginManagement定义.


car*_*ing 242

<pluginManagement/>和之间的区别<plugins/><plugin/>:

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

  • <plugins/>是插件的实际调用.它可能会也可能不会从a继承<pluginManagement/>.

<pluginManagement/>如果它不是父POM,则不需要在项目中使用.但是,如果它是父pom,那么在孩子的pom中,你需要有一个声明,例如:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢!:)这对于`<dependency />`和`<dependencyManagement />`是一样的.您可以在`<dependencyManagement />`部分中定义依赖项(以及它们的版本和作用域),然后在`<dependencies />`部分中定义`groupId`和`artifactId`. (7认同)

Wim*_*uwe 34

您可以在父pom中使用pluginManagement来配置它,以防任何子pom想要使用它,但并非每个子插件都想使用它.一个例子可以是你的超级pom为maven Javadoc插件定义了一些选项.并非每个子pom都可能想要使用Javadoc,因此您可以在pluginManagement部分中定义这些默认值.想要使用Javadoc插件的子pom,只定义了一个插件部分,并将继承父pom中pluginManagement定义的配置.