0

I have following pmd configuration in my pom.xml

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

If I uncomment

    <ruleset>rulesets/java/junit.xml</ruleset>

PMD complains:

    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.

I don't want to follow these rules. I want to disable them. I could not find these files in my project.

Where can I show rule set? How can I disable concrete rule?

P.S.

It is content of 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>

but I run build and anyway see message:

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

Solution:

  1. remove <ruleset>rulesets/java/junit.xml</ruleset> from pom.xml
  2. added inside 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>

picture:

enter image description here

Yu Jiaao
  • 4,444
  • 5
  • 44
  • 57
gstackoverflow
  • 36,709
  • 117
  • 359
  • 710

1 Answers1

0

It is possible to exclude PMD checks per class and per rule. This is configured with the excludeFromFailureFile attribute of the maven-pmd-plugin. This attribute must point a properties file that lists the excludes.

Sample file:

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

If you have a lot of classes and want to disable those checks for every class, another option is to copy the file rulesets/java/junit.xml and make your own rule set by deleting the rules you do not want to check (see this answer).

Community
  • 1
  • 1
Tunaki
  • 132,869
  • 46
  • 340
  • 423