Pmd Maven插件不遵守exclude-cpd.properties

时间:2019-09-27 00:35:44

标签: maven-plugin pmd

我有多个模块的maven项目,结构如下:

/myProject 
  pom.xml
  exclude-cpd.properties
  -- module1
     pom.xml
     exclude-cpd.properties
  -- module2
     pom.xml
     exclude-cpd.properties

在我的父pom.xml中,我添加了pmd插件:

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>3.12.0</version>
                    <configuration>
                        <rulesets>
                            <ruleset>pmd_ruleset.xml</ruleset>
                        </rulesets>
                        <minimumTokens>80</minimumTokens>
                        <includeTests>true</includeTests>
                        <excludeFromFailureFile>exclude-cpd.properties</excludeFromFailureFile>
                        <printFailingErrors>true</printFailingErrors>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

在exclude-cpd.properties中,我将要从cpd-check中排除的所有文件都包含为逗号分隔的字符串。

但是当我运行mvn clean compile时,它仍会扫描那些排除的文件并抱怨重复。看来excludeFromFailureFile根本不起作用,我最终不得不使用excludes从pmd检查和cpd检查中排除文件,但这并不理想。有人知道如何使excludeFromFailureFile工作吗?

工作pom.xml:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.12.0</version>
                <configuration>
                    <rulesets>
                        <ruleset>pmd_ruleset.xml</ruleset>
                    </rulesets>
                    <minimumTokens>80</minimumTokens>
                    <includeTests>true</includeTests>
                    <excludes>
                        <exclude>**/XyzService*.java</exclude>
                    </excludes>
                    <printFailingErrors>true</printFailingErrors>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

2 个答案:

答案 0 :(得分:2)

我认为您误会了国旗。

excludeFromFailureFile的字面意思是:如果在这些文件上报告了违规,则不要使构建失败。这些文件仍会被分析,但是如果只有那些文件且没有其他文件违反,则构建仍会通过(如果其他文件有违反,则构建仍会失败)。这甚至都不是PMD功能,而是Maven插件的特色。

这并不是“从分析中排除”,要确保您在第二个示例中使用的是excludes配置。

答案 1 :(得分:1)

另一个好主意是使用@SuppressWarnings(“ CPD-START”)和@SuppressWarnings(“ CPD-END”)来通过CPD忽略这两个注释中的所有Java代码,例如:

...

//enable suppression (start)
@SuppressWarnings("CPD-START")
public Object shouldBeIgnoredFromHere(String any) throws Exception {
    // any code here will be ignored for the duplication detection
}

...

//disable suppression (end)
@SuppressWarnings("CPD-END)
public void shouldBeIgnoredToHere() {
}

...

阅读 抑制 一章:https://pmd.sourceforge.io/pmd-5.0.5/cpd-usage.html