首页 > 解决方案 > 在 Parent Pom 中定义的 Maven Plugin 有时不会在 Child 没有声明的情况下触发

问题描述

在我的父 POM 中,我定义了一个带有 phase prepare-packageinside的依赖插件<pluginManagement><plugins>

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>${version.plugin.resources}</version>
</plugin>
<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>${version.plugin.dependency}</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
            <outputDirectory>${classpathDir}</outputDirectory>
            <includeScope>runtime</includeScope>
            <excludeClassifiers>${dependencyClassifiers}</excludeClassifiers>
            </configuration>
        </execution>
    </executions>
</plugin>

在我的子 POM 中,我没有指定任何依赖插件。它没有被执行。我必须把它放进<plugins>去让它触发:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
</plugin>

我使用的 Maven 目标是clean install.

我的问题是,为什么我必须maven-dependency-plugin在我的子 POM 中再次明确指定?

  1. 即使我没有在我的 POM 中重新声明它们,其他插件(如maven-jar-pluginmaven-resource-plugin、 )仍在运行。maven-compiler-plugin为什么不一致?
  2. 依赖项的阶段被配置为prepare-package,它package在 Maven生命周期中的阶段之前,因此我认为它应该“按照放弃的顺序执行到指定的点”。但不是,为什么呢?

提前感谢任何能够帮助我查询的人!:)

标签: javamavenmaven-dependency-plugin

解决方案


该部分<pluginManagement>用于在此项目和子项目之间共享插件配置。只有在<plugins>. 有关更多信息,请参阅此答案

但是,有些插件不需要在<plugins>. 这适用于内置生命周期绑定的插件,例如maven-jar-plugin,maven-resource-pluginmaven-compiler-plugin.


推荐阅读