【问题标题】:Pmd. how to configure ruleset?下午。如何配置规则集?
【发布时间】:2021-01-20 10:23:21
【问题描述】:

我的 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.

我不想遵守这些规则。我想禁用它们。我在我的项目中找不到这些文件。

在哪里可以显示规则集? 如何禁用具体规则?

附言

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>

但我运行 build 并且无论如何都会看到消息:

[INFO] PMD Failure: com.terminal.service.impl.ContentServiceImplTest:111 Rule:JUnitAssertionsShouldIncludeMessage Priority:3 JUnit assertions should include a message.

解决方案:

  1. 从 pom.xml 中删除 &lt;ruleset&gt;rulesets/java/junit.xml&lt;/ruleset&gt;
  2. 添加到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>

图片:

【问题讨论】:

    标签: java maven pmd


    【解决方案1】:

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

    Sample file:

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

    如果你有很多类并且想要为每个类禁用这些检查,另一个选择是复制文件rulesets/java/junit.xml 并通过删除你不想检查的规则来创建你自己的规则集 (see this answer )。

    【讨论】:

    • 我应该修改 exclude-pmd.properties 吗?
    • @gstackoverflow 是的,应该和我在回答中给出的示例一样。
    • 看起来我都按照你的建议做了,但它不起作用(
    • 我没有找到应该在哪里复制 rulesets/java/junit.xml。来自 .m2 目录?
    • @gstackoverflow 例如,您可以将修改后的junit.xml 复制到src/main/resources 中。然后在插件的&lt;ruleset&gt; 配置中引用它,比如&lt;ruleset&gt;src/main/resources/modified-junit.xml&lt;/ruleset&gt;
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2015-08-25
    • 2019-11-10
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多