298

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

4

5 回答 5

331

您仍然需要添加

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

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

来自 Maven 文档:

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

于 2012-05-07T13:49:21.903 回答
307

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

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

  • <plugins/>是插件实际调用的部分。它可能会或可能不会从<pluginManagement/>.

<pluginManagement/>如果它不是父 POM,则不需要在项目中有 a 。但是,如果它是父 pom,那么在孩子的 pom 中,您需要有如下声明:

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

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

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

于 2012-05-07T13:59:31.500 回答
44

您可以使用pluginManagementin aparent pom来配置它,以防有人child pom想要使用它,但不是每个子插件都想要使用它。例如,您super pom为 Maven Javadoc 插件定义了一些选项。

不是每个人都child pom可能想要使用 Javadoc,因此您可以在一个pluginManagement部分中定义这些默认值。想要使用 Javadoc 插件的子 pom 只定义了一个插件部分pluginManagement并将从parent pom.

于 2012-05-07T13:49:49.423 回答
3

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

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

复制自:

Maven2 - pluginManagement 和父子关系的问题

于 2012-05-07T13:47:24.643 回答
2

因此,如果我理解得很好,我会说<pluginManagement>就像<dependencyManagement>两者都用于仅在父模块及其子模块之间共享配置。

为此,我们在父项目中定义了依赖项和插件的通用配置,然后我们只需要在子模块中声明依赖项/插件即可使用它,而无需为其定义配置(即版本或执行、目标、 ETC)。虽然这并不妨碍我们覆盖子模块中的配置。

相反<dependencies>,and<plugins>是随配置一起继承的,不应在子模块中重新声明,否则会发生冲突。

那正确吗 ?

于 2020-08-05T15:29:28.233 回答