【问题标题】:How to make maven-pmd-plugin support the latest PMD release?如何使 maven-pmd-plugin 支持最新的 PMD 版本?
【发布时间】:2020-04-28 00:34:20
【问题描述】:

http://maven.apache.org/plugins/maven-pmd-plugin/ 目前是 2.4 版,支持 PMD 4.2.2 版

是否可以在此插件中使用 PMD 4.2.5 版本,如果可以,我们该怎么做?

【问题讨论】:

    标签: maven-2 pmd


    【解决方案1】:

    这有一个 Jira 问题,请参阅 MPMD-97(我建议投票支持它)。

    目前,您可以尝试在本地升级插件中使用的 pmd 版本:

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.4</version>
    
            <dependencies>
    
              <dependency>
                  <groupId>pmd</groupId>
                  <artifactId>pmd-jdk14</artifactId>
                  <version>4.2.5</version>
              </dependency>
    
            </dependencies>
          </plugin>
        </plugins>
      </build>
    

    我没有测试这个,我不知道它是否可以无缝运行。

    【讨论】:

    • 我正在尝试您的建议,但我需要对 JDK 1.5 的支持(pmd-jdk14 使其与 JDK 1.4 兼容)进行上述更改导致插件检索 PMD 的较新版本,但它仍然不断生成 PMD 4.2.2 报告。我不确定为什么会发生这种情况,但会及时通知您结果。
    • 我自己做了一些测试,似乎确实为build 下的插件指定dependencies 不会影响reporting 部分。但是,无法在reporting 下指定依赖关系,所以我实际上不知道如何解决这个问题(除了修补 maven-pmd-plugin)。
    • 是的,报告部分不允许您指定依赖项。我在 build-->pluginManagement-->plugins-->plugin 中移动了这个配置,但我正在验证是否可以让它作为构建阶段的一部分工作
    • 我无法按照上面提到的建议来解决这个问题,它似乎仍然只生成一个 PMD 4.2.2 报告
    • 如果构建失败并显示缺少某些方法的错误,请检查stackoverflow.com/questions/61417986/…
    【解决方案2】:

    这是一个老问题,事情已经发生了变化,但我面临着将 maven-pmd-plugin:3.8 从 pmd 5.6.1 升级到 5.8.1 的挑战。 在撰写本文时,maven-pmd-plugin page 中缺少执行此操作的文档。

    1. 添加 pmd-core、pmd-java 和任何其他 mavenized PMD 工件作为插件依赖项。
    2. 如果您的规则包含在单独的 .jar 模块中,请将该模块也添加到依赖项中。
    3. 确保 check 目标在 compile 阶段 之后运行 - validate 为时过早。 (我选择 process-test-classes 在运行任何测试之前调用它,而不是更常见的 verify,后者也可以,但稍后会运行它)。李>

    pom.xml 配置:

    <properties>
        <rev.javac>1.8</rev.javac>
        <rev.pmd-plugin>3.8</rev.pmd-plugin>
        <rev.pmd>5.8.1</rev.pmd>
    </properties>
    
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>${rev.pmd-plugin}</version>
        <dependencies>
            <dependency>
                <groupId>my.project.group</groupId>
                <artifactId>project-standards</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.pmd</groupId>
                <artifactId>pmd-core</artifactId>
                <version>${rev.pmd}</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.pmd</groupId>
                <artifactId>pmd-java</artifactId>
                <version>${rev.pmd}</version>
            </dependency>
        </dependencies>
        <executions>
            <execution>
                <id>pmd-validation</id>
                <phase>process-test-classes</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <rulesets>
                <ruleset>/pmd/project-pmd-rules.xml</ruleset>
            </rulesets>
            <targetDirectory>${project.build.directory}</targetDirectory>
            <targetJdk>${rev.javac}</targetJdk>
            <failOnViolation>true</failOnViolation>
            <failurePriority>5</failurePriority>
            <verbose>false</verbose>
            <linkXRef>false</linkXRef>
        </configuration>
    </plugin>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多