2

我正在尝试设置一个 maven 项目,以便能够使用两个不同的规则集运行 checkstyle:一个用于 main,一个用于测试。我想做的是类似的事情:

<reporting>
  <plugins>
    <!-- One configuration for main -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-checkstyle-plugin</artifactId>
      <configuration>
        <configLocation>checkstyle</configLocation>
      </configuration>
    </plugin>
    <!-- But a different set of rules for test -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-checkstyle-plugin</artifactId>
      <configuration>
        <sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>
        <configLocation>checkstyle-test.xml</configLocation>
      </configuration>
    </plugin>
  </plugins>
</reporting>

我已经成功地运行了一个版本或另一个版本,但不能同时运行两个版本。包括尝试将它们绑定到不同的执行阶段,但似乎经验法则是最后一个定义是唯一使用的。

所以我要么想:

- 理想情况下 - 有两个可以独立运行的独立 checkstyle 配置文件

或者

- 有一个单一的 checkstyle 配置,使用配置属性 includeTestSourceDirectory 同时检查 main 和 test,但有一些规则有选择地应用于 main/test 或另一个。

4

3 回答 3

4

我一直找不到任何机制可以在编译时将不同的 checkstyle 规则应用于不同的源根(另一个答案可能适用于报告生成,但我的需求是编译时检查)。实现的解决方案是拥有适用于源的规则,然后使用 checkstyle 抑制机制来排除测试类的某些规则,即

<suppress checks="CheckInappropiateForTests" files=".*Test\.java"/>
于 2011-05-17T13:53:26.017 回答
3

以下情况如何:

   <reporting>
     <plugins>
     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.6</version>
        <reportSets>
          <reportSet>
            <id>main_checks</id>
            <reports>
              <report>checkstyle</report>
            </reports>
            <configuration>
              <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
              <includeTestSourceDirectory>false</includeTestSourceDirectory>
              <configLocation>config/maven_checks.xml</configLocation>
              <outputDirectory>${project.reporting.outputDirectory}/main-checks/</outputDirectory>
            </configuration>
          </reportSet>
          <reportSet>
            <id>test_checks</id>
            <reports>
              <report>checkstyle</report>
            </reports>
            <configuration>
              <sourceDirectory></sourceDirectory>
              <testSourceDirectory>${project.build.testSourceDirectory}</testSourceDirectory>
              <includeTestSourceDirectory>true</includeTestSourceDirectory>
              <configLocation>config/sun_checks.xml</configLocation>
              <outputDirectory>${project.reporting.outputDirectory}/test-checks/</outputDirectory>
            </configuration>
          </reportSet>
        </reportSets>
      </plugin>
     </plugins>
   </reporting>
于 2011-05-03T16:47:20.917 回答
0

我发现使用这个技巧,应用于 checktyle 插件,更简单。就我而言,它看起来像这样:

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>checkstyle</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <phase>verify</phase>
                            <configuration>
                                <configLocation>some location</configLocation>
                            </configuration>
                        </execution>
                        <execution>
                            <id>checkstyle2</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <phase>verify</phase>
                            <configuration>
                                <configLocation>some other location</configLocation>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
于 2020-08-28T14:46:31.953 回答