我们如何在Maven中为主要和测试Java代码集设置不同的PMD规则集?

时间:2019-02-10 04:49:16

标签: java maven gradle pmd

在Gradle中,我们可以为pmdMain和pmdTest源集指定不同的PMD配置(包括不同的规则集)。例如

pmdMain {
    ruleSetFiles = files("$javaBuildSystemRoot/src-pmd-rulesets.xml")
}

pmdTest {
    ruleSetFiles = files("$javaBuildSystemRoot/test-pmd-rulesets.xml")
}

我们希望对测试代码的要求不像对主代码那样严格。

有一个单独的基于Maven的项目,目前无法使用gradle,但目前,我们至少要基于主vs测试应用两个不同的规则集。这是一个使用maven PMD插件的单模块单个项目。

我们如何在Maven pom文件中执行此操作?

1 个答案:

答案 0 :(得分:0)

对测试源进行pmd是“相当不合常规的”,但这不是问题的一部分。 :)

Using the executions tag并利用maven-pmd-plugin,您可以使用maven做到这一点。


  

编辑:简而言之并应用于给定的输入(可能超出您的期望/需求),它使您能够/强制您在每个版本中都进行两项检查

<project><build><plugins>
<plugin>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>3.11.0</version> <!-- latest up-to-date -->
    <executions>
       <execution>
           <id>pmd-execution</id>
           <goals>
               <goal>check</goal>
           </goals>
           <configuration>
               <rulesets>
                   <ruleset>${javaBuildSystemRoot}/src-pmd-rulesets.xml</ruleset>
               </rulesets>
           </configuration>
      </execution>
      <execution>
           <id>pmd-test-execution</id>
           <goals>
              <goal>check</goal>
           </goals>
           <configuration>
               <rulesets>
                   <ruleset>${javaBuildSystemRoot}/test-pmd-rulesets.xml</ruleset>
               </rulesets>
           </configuration>
        </execution>
    </executions>
</plugin>
...

另请参阅:Can I configure multiple plugin executions in pluginManagement, and choose from them in my child POM?


  

编辑2 :如果您确实不需要“两个执行”(在1个版本中),而对于“不同版本”仅需要“两个配置” ,则:   Maven Profiles符合您的需求(通过个人资料...您的“可能性收敛到无穷大”)!

您将引入以下个人资料:

 <project>
 ...
 <profiles>
   <profile>
     <id>pmdMain</id>
     <properties>
         <myPmdRuleSetLocation>${javaBuildSystemRoot}/src-pmd-rulesets.xml</myPmdRuleSetLocation>
     </properties>
   </profile> 
   <profile>
     <id>pmdTest</id>
     <properties>
         <myPmdRuleSetLocation>${javaBuildSystemRoot}/test-pmd-rulesets.xml</myPmdRuleSetLocation>
     </properties>
   </profile> 
 <profiles>
 ...
 </project>

并在您的(单个)pmd-plugin配置中使用它:

...
  <ruleset>${myPmdRuleSetLocation}</ruleset>
...

read further输入个人资料及其激活信息。

(另外<profile/>可以包含并覆盖<build/>标签!)