pmd maven 插件不尊重 exclude-cpd.properties
pmd maven plugin does not respect exclude-cpd.properties
我有多个模块的maven项目,结构是这样的:
/myProject
pom.xml
exclude-cpd.properties
-- module1
pom.xml
exclude-cpd.properties
-- module2
pom.xml
exclude-cpd.properties
在我的 parent 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>
我认为你误解了标志。
excludeFromFailureFile
的字面意思是:如果在这些文件上报告了违规,请不要使构建失败。文件仍然会被分析,但如果只有这些文件没有其他文件有违规,构建仍然会通过(如果其他文件有违规,构建仍然会失败)。这甚至不是 PMD 功能,而是 Maven 插件内置的功能。
这不是 "exclude from analysis",要做到这一点,您需要使用第二个示例中使用的 excludes
配置。
另一个好主意是使用 @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() {
}
...
我有多个模块的maven项目,结构是这样的:
/myProject
pom.xml
exclude-cpd.properties
-- module1
pom.xml
exclude-cpd.properties
-- module2
pom.xml
exclude-cpd.properties
在我的 parent 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>
我认为你误解了标志。
excludeFromFailureFile
的字面意思是:如果在这些文件上报告了违规,请不要使构建失败。文件仍然会被分析,但如果只有这些文件没有其他文件有违规,构建仍然会通过(如果其他文件有违规,构建仍然会失败)。这甚至不是 PMD 功能,而是 Maven 插件内置的功能。
这不是 "exclude from analysis",要做到这一点,您需要使用第二个示例中使用的 excludes
配置。
另一个好主意是使用 @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() {
}
...