首页 > 解决方案 > 是否有一个 maven-git-checkstyle 插件可以单独在 git 暂存文件上运行 checkstyle 目标?

问题描述

我们正在开发遗留应用程序代码库并进行增量开发以提高其代码质量。当我们在项目上运行 maven checkstyle 目标时,我们遇到了很多错误。为了逐步解决这些问题,我们正在采取一种方法,仅在每个开发人员正在编辑和提交之前的文件上运行 checkstyle。
我在搜索解决方案时遇到的选项是预提交挂钩,它在提交代码之前执行 maven 目标。
参考资料:
https ://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
https://hdpe.me/post/maven-checkstyle-pre-commit-hook/

上述方法的缺点是它不能在每台开发人员机器上强制执行。由于挂钩未上传到存储库中。在实现服务器端挂钩时,我们有自己的限制(团队政治)。

IntelliJ checkstyle 插件具有我正在寻找的确切功能(检查所有修改的文件)。
检查所有修改的文件

但是,并非我们团队中的所有开发人员都使用 IntelliJ,并且无法在构建过程中强制执行。

我想我想问的是,有没有办法触发预提交钩子(逻辑)作为 Maven 目标?

标签: mavenmaven-plugingithookscheckstylemaven-checkstyle-plugin

解决方案


是否有一个 maven-git-checkstyle 插件可以单独在 git 暂存文件上运行 checkstyle 目标?

我知道没有插件可以做到这一点,但是你有两个我能想到的选项来实现这个目标。

1) Checkstyle 可以扩展,因此您可以实现自己的 Filter。过滤器允许您忽略和隐藏特定违规行为,而不是禁用整个检查。将JGit集成到您的过滤器中,您将能够访问暂存文件列表和存储库的任何提交。只需让过滤器抑制未出现在暂存文件列表中的任何文件的所有违规行为。您可以根据您的特定需求进一步自定义过滤器。

2) 创建您希望使用SuppressionFilter 抑制的文件列表,并将它们存储到唯一的旧式抑制文件中。您可以为您想要的抑制类型自定义列表(例如:仅按文件、按文件和检查名称等...)。当您的开发人员处理项目时,请删除他们修改的文件的特定抑制。如果您再次集成JGit并确保未在遗留抑制文件中列出任何修改的文件,则可以通过 UT 强制执行此操作。

无论您采取哪种方式,一旦您完成了所有旧文件的升级,我建议您删除这些旧版抑制并始终针对整个工作区运行。


推荐阅读