Say repo a
通过x
添加了<plugin><plugin>
个插件,并通过b
将a
包含<dependency></dependency>
作为依赖项。
那么,在repo b
中,插件x
会被继承/包含,并能够执行其目标吗?
上一篇,我认为不是,但偶然的是,根据测试,我发现它实际上已被包括在内。
在Google上搜索了一段时间后,没有得到明确的解释。有人帮助澄清这种行为吗?
(根据评论的要求,我会添加pom配置)
第1部分 - 来自问题的原始配置
来自(父)项目的 (1-1) pom.xml
项目 p :
在<pluginManagement>
中声明插件版本:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
<executions>
<!-- <execution> -->
<!-- <id>analyse</id> -->
<!-- <goals> -->
<!-- <goal>sonar</goal> -->
<!-- </goals> -->
<!-- <phase>install</phase> -->
<!-- </execution> -->
</executions>
</plugin>
</plugins>
</pluginManagement>
在<profiles>
中定义插件配置:
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>http://localhost:5757</sonar.host.url>
</properties>
</profile>
</profiles>
来自项目 a 的(1-2) pom.xml
(使用项目 p 作为父项):
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
项目 b 中的 (1-3) pom.xml
(也使用项目 p 作为父项,包含项目 a 作为依赖项)
<dependency>
<groupId>xxx</groupId>
<artifactId>a</artifactId>
</dependency>
所以,情况是,项目 b 没有直接使用sonar-maven-plugin
包含插件<plugin>
(尽管它继承了<pluginManagement>
项目 p )。
它仍然可以成功执行目标mvn sonar:sonar
,因此它似乎可以让插件工作,因为它有<dependency>
项目 a 。
第2部分 - 评论中提到的进一步测试的配置
来自(父)项目的 (2-1) pom.xml
p
与(1-1)
相同 来自项目 a 的 (2-2) pom.xml
删除<plugin>
部分,并通过<dependency>
替换插件的依赖项:
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
</dependency>
</dependencies>
来自项目 b 的 (2-3) pom.xml
与(1-3)
相同而且,现在项目a
和b
仍然可以成功地通过mvn sonar:sonar
执行目标,而不是<plugin>
部分。