下午如何配置规则集?
Pmd. how to configure ruleset?
我的 pom.xml
中有以下 pmd 配置
<!-- language: lang-xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.3</version>
<configuration>
<includeTests>true</includeTests>
<printFailingErrors>true</printFailingErrors>
<verbose>true</verbose>
<rulesets>
<ruleset>rulesets/java/basic.xml</ruleset>
<ruleset>rulesets/java/braces.xml</ruleset>
<!--<ruleset>rulesets/java/junit.xml</ruleset>-->
<ruleset>rulesets/java/unusedcode.xml</ruleset>
<!--<ruleset>rulesets/java/codesize.xml</ruleset>-->
<ruleset>ruleset-naming.xml</ruleset>
<ruleset>rulesets/java/imports.xml</ruleset>
<ruleset>rulesets/java/empty.xml</ruleset>
<ruleset>rulesets/jsp/basic.xml</ruleset>
</rulesets>
<includes>
<include>**\/*.jsp</include>
<include>**\/*.java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<configuration>
<excludeFromFailureFile>${basedir}/src/main/resources/exclude-pmd.properties</excludeFromFailureFile>
</configuration>
</execution>
</executions>
</plugin>
如果我取消评论
<ruleset>rulesets/java/junit.xml</ruleset>
PMD 抱怨:
JUnit assertions should include a message.
UnitTestContainsTooManyAsserts Priority:3 JUnit tests should not contain more than 1 assert(s)
JUnitAssertionsShouldIncludeMessage Priority:3 JUnit assertions should include a message.
我不想遵守这些规则。我想禁用它们。我在我的项目中找不到这些文件。
我在哪里可以显示规则集?
如何禁用具体规则?
P.S.
是规则集的内容-naming.xml
<ruleset name="Maven Ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<rule ref="rulesets/java/naming.xml">
<exclude name="ShortVariable"/>
<exclude name="LongVariable"/>
<exclude name="ShortClassName"/>
</rule>
<rule ref="rulesets/java/junit.xml">
<exclude name="JUnitAssertionsShouldIncludeMessage"/>
</rule>
</ruleset>
但我 运行 构建并看到消息:
[INFO] PMD Failure: com.terminal.service.impl.ContentServiceImplTest:111 Rule:JUnitAssertionsShouldIncludeMessage Priority:3 JUnit assertions should include a message.
解决方案:
- 从 pom.xml
中删除 <ruleset>rulesets/java/junit.xml</ruleset>
- 里面加了
ruleset-naming.xml
<ruleset name="Maven Ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<rule ref="rulesets/java/junit.xml">
<exclude name="JUnitAssertionsShouldIncludeMessage"/>
<exclude name="JUnitTestContainsTooManyAsserts"/>
<exclude name="JUnitTestsShouldIncludeAssert"/>
</rule>
</ruleset>
图片:
可以根据 class 和规则排除 PMD 检查。这是使用 maven-pmd-plugin
的 excludeFromFailureFile
属性配置的。此属性必须指向一个列出排除项的属性文件。
org.apache.maven.ClassA=UnitTestContainsTooManyAsserts,JUnitAssertionsShouldIncludeMessage
org.apache.maven.ClassB=UnitTestContainsTooManyAsserts,JUnitAssertionsShouldIncludeMessage
如果您有很多 classes 并且想为每个 class 禁用这些检查,另一种选择是复制文件 rulesets/java/junit.xml
并制定您自己的规则集删除您不想检查的规则 (see this answer)。
我的 pom.xml
中有以下 pmd 配置<!-- language: lang-xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.3</version>
<configuration>
<includeTests>true</includeTests>
<printFailingErrors>true</printFailingErrors>
<verbose>true</verbose>
<rulesets>
<ruleset>rulesets/java/basic.xml</ruleset>
<ruleset>rulesets/java/braces.xml</ruleset>
<!--<ruleset>rulesets/java/junit.xml</ruleset>-->
<ruleset>rulesets/java/unusedcode.xml</ruleset>
<!--<ruleset>rulesets/java/codesize.xml</ruleset>-->
<ruleset>ruleset-naming.xml</ruleset>
<ruleset>rulesets/java/imports.xml</ruleset>
<ruleset>rulesets/java/empty.xml</ruleset>
<ruleset>rulesets/jsp/basic.xml</ruleset>
</rulesets>
<includes>
<include>**\/*.jsp</include>
<include>**\/*.java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<configuration>
<excludeFromFailureFile>${basedir}/src/main/resources/exclude-pmd.properties</excludeFromFailureFile>
</configuration>
</execution>
</executions>
</plugin>
如果我取消评论
<ruleset>rulesets/java/junit.xml</ruleset>
PMD 抱怨:
JUnit assertions should include a message.
UnitTestContainsTooManyAsserts Priority:3 JUnit tests should not contain more than 1 assert(s)
JUnitAssertionsShouldIncludeMessage Priority:3 JUnit assertions should include a message.
我不想遵守这些规则。我想禁用它们。我在我的项目中找不到这些文件。
我在哪里可以显示规则集? 如何禁用具体规则?
P.S.
是规则集的内容-naming.xml
<ruleset name="Maven Ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<rule ref="rulesets/java/naming.xml">
<exclude name="ShortVariable"/>
<exclude name="LongVariable"/>
<exclude name="ShortClassName"/>
</rule>
<rule ref="rulesets/java/junit.xml">
<exclude name="JUnitAssertionsShouldIncludeMessage"/>
</rule>
</ruleset>
但我 运行 构建并看到消息:
[INFO] PMD Failure: com.terminal.service.impl.ContentServiceImplTest:111 Rule:JUnitAssertionsShouldIncludeMessage Priority:3 JUnit assertions should include a message.
解决方案:
- 从 pom.xml 中删除
- 里面加了
ruleset-naming.xml
<ruleset>rulesets/java/junit.xml</ruleset>
<ruleset name="Maven Ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<rule ref="rulesets/java/junit.xml">
<exclude name="JUnitAssertionsShouldIncludeMessage"/>
<exclude name="JUnitTestContainsTooManyAsserts"/>
<exclude name="JUnitTestsShouldIncludeAssert"/>
</rule>
</ruleset>
图片:
可以根据 class 和规则排除 PMD 检查。这是使用 maven-pmd-plugin
的 excludeFromFailureFile
属性配置的。此属性必须指向一个列出排除项的属性文件。
org.apache.maven.ClassA=UnitTestContainsTooManyAsserts,JUnitAssertionsShouldIncludeMessage
org.apache.maven.ClassB=UnitTestContainsTooManyAsserts,JUnitAssertionsShouldIncludeMessage
如果您有很多 classes 并且想为每个 class 禁用这些检查,另一种选择是复制文件 rulesets/java/junit.xml
并制定您自己的规则集删除您不想检查的规则 (see this answer)。