为什么只能在<build>中而不是在<reporting>中指定Maven插件依赖项?

时间:2018-12-10 17:08:41

标签: maven checkstyle maven-checkstyle-plugin

为什么只能在<dependencies>部分的<plugin>部分而不是<build>的{​​{1}}部分中定义<reporting>的{​​{1}}?

  • 为什么Maven pom语法不允许pom.xml中的<dependencies>
    • 如果用户只想为<reporting>配置插件并设置依赖项版本怎么办?
  • <reporting>部分中的插件如何/为什么使用<build>依赖性信息?

我找到的文档,下面我解释为什么它没有回答问题(文档的困惑实际上就是为什么我在这里问这个问题!)。

根据我已阅读,观察和尝试的内容,这是我目前的理解:

  

脚本<reporting>部分中的插件可以覆盖默认的依赖项信息,这将影响<build>部分中插件的依赖项。因此,插件依赖项信息不必位于<reporting>部分,只需位于<reporting>部分。

这是正确的吗?在文档中是否有说明这一点的地方?为了正确了解<build>的{​​{1}}和<build>插件配置之间的关系,我缺少什么细节?

来自Maven文档

它在Maven文档Using the Reporting vs the Build Tag中说:

  

使用<reporting>标签与<dependencies>标签
  在pom的<reporting><build>元素中配置报告插件不会有相同的行为!

     

<reporting>
  它仅使用在<build>元素中指定的每个报告插件的mvn site元素中定义的参数,即,站点始终忽略在{{中指定的每个插件的<configuration>元素中定义的参数1}}。

文档明确指出<reporting><configuration>之间没有共享,但是 我的问题是关于<build>以及如何/为什么只在<configuration>中声明而不是<build>

似乎<reporting> do 中指定的依赖项会延续到<dependencies>插件中。但这是我要确认/解释的一点。

最小示例

我遇到了与<build>一起使用的问题upgrading the dependencies for the CheckStyle plugin at runtime,因此这个最小的POM示例以Checkstyle插件为例来演示该问题。

<reporting>

1 个答案:

答案 0 :(得分:1)

我会说情况并不是那么简单-因为<dependencies>部分中可能有<reporting>

我认为重点在于插件本身(因此每个插件可能有所不同)。

但是首先,<build><reporting>之间有什么区别:

  • <build>用于编译,测试-即生成/分析/运行代码-与mvn clean install

  • <reporting>用于在生成mvn site

  • 的文档期间使用

所以问题是checkstyle插件在文档生成过程中是否需要您的依赖关系-我想不是-所以checkstyle拒绝<reporting>中的所有依赖关系。

因此,要证明报告中的依赖关系是可能的,请查看Spotbug(另一个著名的分析器):

<build>
  <plugins>
    <plugin>
      <groupId>com.github.spotbugs</groupId>
      <artifactId>spotbugs-maven-plugin</artifactId>
      <version>3.1.12.1</version>
      <configuration>
        <xmlOutput>true</xmlOutput>
        <spotbugsXmlWithMessages>true</spotbugsXmlWithMessages>
        <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory>
        <failOnError>false</failOnError>
        <includeTests>true</includeTests>
        <dependencies>
          <dependency>
            <groupId>com.mebigfatguy.fb-contrib</groupId>
            <artifactId>fb-contrib</artifactId>
            <version>7.4.3.sb</version>
          </dependency>

          <plugin>
            <groupId>com.h3xstream.findsecbugs</groupId>
            <artifactId>findsecbugs-plugin</artifactId>
            <version>LATEST</version>
          </plugin>
        </dependencies>
      </configuration>
    </plugin>
  </plugins>
</build>


<reporting>
  <plugins>
    <plugin>
      <groupId>com.github.spotbugs</groupId>
      <artifactId>spotbugs-maven-plugin</artifactId>
      <version>3.1.12.1</version>
      <configuration>
        <xmlOutput>true</xmlOutput>
        <spotbugsXmlWithMessages>true</spotbugsXmlWithMessages>
        <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory>
        <failOnError>false</failOnError>
        <includeTests>true</includeTests>
        <dependencies>
          <dependency>
            <groupId>com.mebigfatguy.fb-contrib</groupId>
            <artifactId>fb-contrib</artifactId>
            <version>7.4.3.sb</version>
          </dependency>

          <plugin>
            <groupId>com.h3xstream.findsecbugs</groupId>
            <artifactId>findsecbugs-plugin</artifactId>
            <version>LATEST</version>
          </plugin>

        </dependencies>
      </configuration>
    </plugin>
  </plugins>
</reporting>

请仔细看这个示例-因为这里的<dependencies><configuration>的一部分。因此,仔细阅读每个插件的文档总是明智的。

有关完整的maven pom.xml,请查看我的小型OpenSource TemplateEngine,其中包括许多不仅适用于maven的最佳实践。