Maven“checkstyle:checkstyle”始终默认为“sun_checks.xml”,并采用内联checkstyle配置。

4

我想确定是我做错了什么还是maven checkstyle插件的bug。如果我输入mvn checkstyle:check,会得到以下结果:

jonathanfisher@odin ~/dev/snapjms/snapjms $ mvn checkstyle:check
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building snapjms 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-checkstyle-plugin:2.17:check (default-cli) @ snapjms ---
[INFO] There is 1 error reported by Checkstyle 6.11.2 with /Users/jonathanfisher/dev/snapjms/snapjms/target/checkstyle-rules.xml ruleset.
[ERROR] src/main/java/org/xxx/xxx/snapjms/jms/factories/UnsupportedPayloadException.java:[8] (sizes) LineLength: Line is longer than 135 characters (found 144).
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.411 s
[INFO] Finished at: 2016-06-16T15:33:58-05:00
[INFO] Final Memory: 17M/371M

如果我执行mvn checkstyle:checkstyle,注意它会切换到sun_checks.xml:
jonathanfisher@odin ~/dev/snapjms/snapjms $ mvn checkstyle:checkstyle
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building snapjms 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-checkstyle-plugin:2.17:checkstyle (default-cli) @ snapjms ---
[INFO] There are 451 errors reported by Checkstyle 6.11.2 with sun_checks.xml ruleset.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.904 s
[INFO] Finished at: 2016-06-16T15:35:46-05:00
[INFO] Final Memory: 24M/361M

这是我的内联配置:

<build>
   <pluginManagement>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>2.17</version>
            <inherited>true</inherited>
            <configuration>
               <logViolationsToConsole>true</logViolationsToConsole>
               <checkstyleRules>
                  <module name="Checker">
                     <module name="SuppressionCommentFilter" />
                     <module name="LineLength">
                        <property
                           name="max"
                           value="135" />
                        <property
                           name="ignorePattern"
                           value="@version|@see" />
                     </module>
               </checkstyleRules>
            </configuration>
         </plugin>
      </plugins>
   </pluginManagement>
   <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
      </plugin>
   </plugins>
</build>
<reporting>
   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-checkstyle-plugin</artifactId>
   </plugin>
</reporting>

关于 mvn:site 的报告也使用了 sun_checks.xml。我做错了什么吗?

2个回答

6

checkstyle目标从配置的configLocation读取规则集文件。默认情况下,这是插件中包含的sun_checks.xml

指定要使用的XML配置文件的位置。[...]

Maven Checkstyle插件中包含2个预定义的规则集:

  • sun_checks.xml:Sun Checks。
  • google_checks.xml:Google Checks。

默认值:sun_checks.xml

check目标相反,它没有checkstyleRules参数,无法启用内联检查器配置,因此覆盖了规则集的位置需要指定。
我在maven-checkstyle-plugin JIRA上找不到关于此的增强请求,因此可能需要询问:内联配置在MCHECKSTYLE-211中被引入,但显然仅涵盖了check目标。
这解释了您的输出:
  • 使用mvn checkstyle:check命令时,所使用的规则是在<checkstyleRules>参数中定义的;
  • 使用mvn checkstyle:checkstyle命令时,未设置规则位置,因此默认使用sun_checks.xml文件。

因此,如果要在check目标下(例如在mvn site命令下运行报告目标时)使用您的规则,则需要拥有一个外部文件,并引用它:

<configLocation>checkstyle.xml</configLocation>

2
下面的代码片段来自CheckstyleViolationCheckMojo。
@Parameter( property = "checkstyle.config.location", defaultValue = "sun_checks.xml" )
private String configLocation;

这是在执行命令时执行的代码。

mvn checkstyle:check

如果仔细查看@Parameter注释,它有一个名为“checkstyle.config.location”的参数名称属性,默认值为“sun_checks.xml”,该值可以通过使用-D标志在命令行上传递来进行覆盖。因此,如果您想使用不同的检查样式配置,请在执行命令时添加它,如下所示:

mvn checkstyle:check -Dcheckstyle.config.location=[path to my checkstyle file]
mvn checkstyle:check -Dcheckstyle.config.location=google_checks.xml -Dcheckstyle.violationSeverity=warning
mvn checkstyle:check -Dcheckstyle.config.location=~/custom_checks.xml

请注意,Google Checks已经包含在Checkstyle插件中,因此它会被解析为资源文件,您不必添加路径,除非您有自定义版本。
您可以通过查看源代码来查看可以传递的所有属性。
请参阅以下链接:
https://github.com/apache/maven-plugins/blob/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleViolationCheckMojo.java

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接