有没有maven-git-checkstyle插件可以单独在git staged文件上运行checkstyle目标?

时间:2018-04-25 07:46:45

标签: maven maven-plugin githooks checkstyle maven-checkstyle-plugin

我们正在开发一个遗留应用程序代码库并进行增量开发以提高其代码质量。 当我们在项目中运行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插件具有我正在寻找的确切功能(检查所有修改过的文件) Check All Modified Files

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

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

1 个答案:

答案 0 :(得分:0)

  

是否有maven-git-checkstyle插件仅在git staged文件上运行checkstyle目标?

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

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

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

您采取的路线,一旦升级完所有遗留文件,我建议删除这些遗留抑制并始终针对整个工作区运行。