我有多个模块的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>
答案 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