首页 > 解决方案 > 我们如何在 Maven 中为主要和测试 java 代码集设置不同的 PMD 规则集?

问题描述

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

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

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

我们希望测试代码的严格程度低于主代码。

有一个单独的基于 maven 的项目,我们目前无法使用 gradle。但现在,我们希望至少应用基于 main vs test 的 2 个不同的规则集。它是一个单模块单项目,使用 maven PMD 插件。

我们如何在 Maven pom 文件中做到这一点?

标签: javamavengradlepmd

解决方案


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

使用 executions 标签并利用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>
...

另请参阅:我可以在 pluginManagement 中配置多个插件执行,并在我的子 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>
...

进一步阅读配置文件及其激活。

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


推荐阅读