簡體   English   中英

下午如何配置規則集?

[英]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.

我不想遵守這些規則。 我想禁用它們。 我在我的項目中找不到這些文件。

我在哪里可以顯示規則集? 如何禁用具體規則?

聚苯乙烯

它是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添加
 <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>

圖片:

在此處輸入圖片說明

可以排除每個類和每個規則的 PMD 檢查。 這是使用maven-pmd-pluginexcludeFromFailureFile屬性配置的。 此屬性必須指向列出排除項的屬性文件。

示例文件

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

如果您有很多類並希望對每個類禁用這些檢查,另一種選擇是復制文件rulesets/java/junit.xml並通過刪除您不想檢查的規則來創建自己的規則集(請參閱此回答)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM