如何从 checkstyle 插件检查中排除 module-info.java?
Posted
技术标签:
【中文标题】如何从 checkstyle 插件检查中排除 module-info.java?【英文标题】:How to exclude module-info.java from checkstyle plugin checks? 【发布时间】:2018-03-11 18:10:45 【问题描述】:将module-info.java
文件添加到我的项目后,我的 checkstyle 插件开始失败:
[ERROR] 未能执行目标 org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check 项目电子邮件上的(默认 cli):在 checkstyle 期间失败 配置:分析过程中发生NoViableAltException 文件 /home/xxx/IdeaProjects/blynk-server/server/notifications/email/src/main/java/module-info.java。 意外令牌:模块 -> [帮助 1]
我试过了
<module name="BeforeExecutionExclusionFileFilter">
<property name="fileNamePattern" value="module\-info\.java$"/>
</module>
但是,它失败了:
[ERROR] 未能执行目标 org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check 项目 blynk 上的 (default-cli):在 checkstyle 期间失败 配置:无法初始化模块 BeforeExecutionExclusionFileFilter - 无法实例化 'BeforeExecutionExclusionFileFilter' 类,也不可能 将其实例化为 com.puppycrawl.tools.checkstyle.checks.annotation.BeforeExecutionExclusionFileFilter
在 maven-checkstyle-plugin 的 checkstyle 期间跳过 module-info.java
文件的正确方法是什么?
【问题讨论】:
【参考方案1】:不确定 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 文档中的更多信息。
【讨论】:
理想情况下,checkstyle 插件应该不会为module-info.java
抛出异常,不是吗?
@nullpointer 是的。但我不知道他们是否已经支持它。我从他们的文档中找到了this page,这表明它无法读取该文件。
你似乎正在朝着这个方向进行一些工作。我试过detailing it as well。【参考方案2】:
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 功能(例如新检查)将被识别。
【讨论】:
【参考方案3】:虽然这不可能作为答案。然而太长了,无法发表评论,只是为了记下maven-checkstyle-plugin
所在的轨道:-
2.17
于 2015 年 10 月 15 日发布,几乎是 2 年前的版本。
当前的 maven-plugins 主干指向该插件在其3.0.0-SNAPSHOT
版本中正在进行的工作,这可能意味着我们很快可以期待在不久的将来某个时候出现org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0
,并将module-info.java
理解为一个类.
这与Java+9+-+Jigsaw 文档不一致,该文档指定了正在升级以支持 JDK-9 的模块和插件列表。
【讨论】:
我认为这与 Maven 插件无关。该插件在内部委托给 Checkstyle。支持module-info.java
可能应该在 Checkstyle 方面完成,而不是 Maven(这解释了您关于升级 wiki 中缺少对插件的引用的第三点)。
@manouti 我试图提出的一点是插件更新可能内置了 checkstyle 支持。以上是关于如何从 checkstyle 插件检查中排除 module-info.java?的主要内容,如果未能解决你的问题,请参考以下文章
Java代码规范和质量检查插件-Checkstyle(官方资源)
maven配置checkstyle插件对代码规范进行静态检查