如何在 Jenkins PMD 插件中添加自定义 PMD 规则?

How to add a custom PMD rule in Jenkins PMD plugin?

我想在 PMD 中使用自定义规则。 我在 jenkins 中安装了 PMD 插件,我还创建了一个 jar :

  1. 规则集文件
  2. 自定义规则的 java 代码(自定义规则扩展自 AbstractJavaRule)。

我在 PMD 插件的 lib 目录中添加了这个 jar (jenkins/plugins/pmd/WEB-INF/lib)。

我还在项目的 pom.xml 中添加了这个(以测试 PMD):

        <reporting>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-pmd-plugin</artifactId>
                    <version>2.7.1</version>
                    <configuration>
                        <linkXRef>false</linkXRef>
                        <targetJdk>1.6</targetJdk>
                        <rulesets>
                                 <ruleset>/rulesets/basic.xml</ruleset>
                        </rulesets>                  
                    </configuration>
                </plugin>
            </plugins>
    </reporting> 

我如何告诉 jenkins PMD 插件使用我的新 JAVA 规则?

我认为,第一步是让自定义 PMD 规则在没有 Jenkins 的情况下工作。 Jenkins 将触发 maven 构建,这将触发 PMD 创建报告文件 pmd.xml,然后 Jenkins PMD 插件将解析此 pmd.xml 文件。

  1. Maven - 您已在报告部分添加了 maven-pmd-plugin。这意味着,您需要生成站点,以获取 PMD 报告(运行 mvn site。也可以在构建期间 运行 PMD,例如 运行 阶段 verify 中的 pmd:pmd。另见 PMD Mojo Documentation

  2. 为了使自定义规则和自定义规则集可用,您需要将 jar 作为附加依赖项添加到 maven-pmd-plugin 部分,例如

    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>2.7.1</version>
        ...
        <dependencies>
            <dependency>
                <groupId>com.your.custom.rule</groupId>
                <artifactId>custom-rule</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </plugin>
    
  3. 验证,mvn site 将生成 pmd 报告,通常在 target/pmd.xml.

  4. 可能是,Jenkins PMD 插件现在只显示您的规则,但没有代码示例和描述等文档。这是在 PMDMessages class and uses "RegisteredRuleSets" feature of PMD, which is not good documented, but the sourcecode is here(对于 PMD 4.3)中实现的。

  5. 在您的 jar 目录 rulesets 中添加一个名为 rulesets.properties 的属性文件。您通常会将此文件放在 src/main/resources/rulesets/rulesets.properties 下的源代码树中。该文件需要有以下内容

    rulesets.filenames=rulesets/custom-ruleset-1.xml,rulesets/custom-ruleset-2.xml
    

它包含以逗号分隔的规则集文件列表。如果您将此文件添加到您的 jar 中,那么 Jenkins PMD 报告应该包含您想要的信息。

请注意,已经有更新版本的 Maven PMD 插件可用,目前最新版本是 3.5。此版本基于引入多种语言的 PMD 5,并且 rulesets.properties 文件的路径在 java.

的情况下更改为 rulesets/java/rulesets.properties