Maven - 是否会包含依赖项中定义的插件?

时间:2018-04-06 11:57:01

标签: maven dependencies pom.xml maven-plugin

Say repo a通过x添加了<plugin><plugin>个插件,并通过ba包含<dependency></dependency>作为依赖项。

那么,在repo b中,插件x会被继承/包含,并能够执行其目标吗?

上一篇,我认为不是,但偶然的是,根据测试,我发现它实际上已被包括在内。

在Google上搜索了一段时间后,没有得到明确的解释。有人帮助澄清这种行为吗?

@Update - pom config

(根据评论的要求,我会添加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)

相同

而且,现在项目ab仍然可以成功地通过mvn sonar:sonar执行目标,而不是<plugin>部分。

0 个答案:

没有答案