在我的父POM中,我在prepare-package
内定义了一个阶段为<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
。
我的问题是,为什么我必须在子POM中再次明确指定maven-dependency-plugin
?
maven-jar-plugin
,maven-resource-plugin
,maven-compiler-plugin
正在运行,即使我未在POM中重新声明它们也是如此。为什么不一致?prepare-package
,它在Maven package
中的lifecycle阶段之前,因此,我认为它应该已经“按照给定的顺序执行了”。但这不是,为什么?谢谢任何能够帮助我查询的人! :)
<pluginManagement>
部分用于在该项目和子项目之间共享插件配置。仅当插件在<plugins>
中定义时才执行。有关更多信息,请参见this answer。
但是,某些插件无需在<plugins>
中定义。这适用于built-in lifecycle binding的插件,例如maven-jar-plugin
,maven-resource-plugin
和maven-compiler-plugin
。