如何从 checkstyle 插件检查中排除 module-info.java?

How to exclude module-info.java from checkstyle plugin checks?

module-info.java 个文件添加到我的项目后,我的 checkstyle 插件开始失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (default-cli) on project email: Failed during checkstyle configuration: NoViableAltException occurred during the analysis of file /home/xxx/IdeaProjects/blynk-server/server/notifications/email/src/main/java/module-info.java. unexpected token: module -> [Help 1]

我试过了

<module name="BeforeExecutionExclusionFileFilter">
    <property name="fileNamePattern" value="module\-info\.java$"/>
</module>

然而,它失败了:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (default-cli) on project blynk: Failed during checkstyle configuration: cannot initialize module BeforeExecutionExclusionFileFilter - Unable to instantiate 'BeforeExecutionExclusionFileFilter' class, it is also not possible to instantiate it as com.puppycrawl.tools.checkstyle.checks.annotation.BeforeExecutionExclusionFileFilter

在 maven-checkstyle-plugin 的 checkstyle 期间跳过 module-info.java 文件的正确方法是什么?

不确定为什么 Checkstyle 过滤器不起作用(这个 reported bug 看起来与你的非常相似并且它在版本 7.3.0 中得到修复,所以你可能需要更新 Checkstyle)。

无论如何,Maven excludes 元素也应该这样做:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <configuration>
        <excludes>**/module-info.java</excludes>
    </configuration>
</plugin>

plugin goal 文档中有更多内容。

尽管这可能不能作为答案。但是太长了,不适合发表评论,只是为了记下 maven-checkstyle-plugin 所在的曲目:-

  • 2015 年 10 月 15 日 2.17 版本的 last release 几乎是 2 年前的事了。
  • maven-plugins 的当前主干指向插件在其 3.0.0-SNAPSHOT 版本中正在进行的工作,这可能意味着我们很快可以期待 org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0 在不久的将来的某个时候,这将理解module-info.java 作为 class.
  • 这与指定正在升级以支持 JDK-9 的模块和插件列表的 Java+9+-+Jigsaw 文档不一致。

BeforeExecutionExclusionFileFilter 已添加到 Checkstyle 7.2 中。

但是maven-checkstyle-plugin版本3.0.0(截至2018-04-01的最新版本)默认使用Checkstyle 6.18。

"Checkstyle" 和 "Checkstyle Maven Plugin" 是不同的东西,有不同的发布周期。

您可能想要upgrade the Checkstyle version如下:

<plugin>
  <artifactId>maven-checkstyle-plugin</artifactId>
  <version>3.0.0</version> <!-- Checkstyle Plugin version -->

  <!-- ... Configuration, Executions ... -->

  <dependencies>
    <dependency>
      <groupId>com.puppycrawl.tools</groupId>
      <artifactId>checkstyle</artifactId>
      <version>8.8</version> <!-- Checkstyle version -->
    </dependency>
  </dependencies>
</plugin>

之后,BeforeExecutionExclusionFileFilter 以及其他较新的 Checkstyle 功能(例如新检查)将被识别。