PMD。如何配置规则集?

时间:2015-10-10 10:31:10

标签: java maven pmd

我在pom.xml中有以下pmd配置

<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。

它是 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/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.

解决方案:

  1. 从pom.xml中删除<ruleset>rulesets/java/junit.xml</ruleset>
  2. ruleset-naming.xml
  3. 内添加
      

    http://pmd.sf.net/ruleset_xml_schema.xsd”            的xsi:noNamespaceSchemaLocation = “http://pmd.sf.net/ruleset_xml_schema.xsd” &GT;

    <rule ref="rulesets/java/junit.xml">
        <exclude name="JUnitAssertionsShouldIncludeMessage"/>
        <exclude name="JUnitTestContainsTooManyAsserts"/>
        <exclude name="JUnitTestsShouldIncludeAssert"/>
    </rule>
    
         

    不幸的是无法正确格式化内容。

    图片:

    enter image description here

1 个答案:

答案 0 :(得分:0)

可以排除每个类和每个规则的PMD检查。这是使用maven-pmd-plugin的{​​{3}}属性配置的。此属性必须指向列出排除项的属性文件。

excludeFromFailureFile

org.apache.maven.ClassA=UnitTestContainsTooManyAsserts,JUnitAssertionsShouldIncludeMessage
org.apache.maven.ClassB=UnitTestContainsTooManyAsserts,JUnitAssertionsShouldIncludeMessage

如果您有很多类并希望为每个类禁用这些检查,则另一个选项是复制文件rulesets/java/junit.xml并通过删除您不想检查的规则来创建自己的规则集({ {3}})。

相关问题