我正在寻找一种方法来强制开发人员使用相同的java代码格式化规则。我的要求是:
梯度积分
检查代码格式是否正确的任务。如果提交了格式不正确的代码,这将用于ci以导致生成失败
修复格式错误代码的任务(很好)
智能集成
通过“重新格式化代码”操作,可以在ide中修复格式错误的代码
ide生成的代码(例如getter/setter生成)符合规则
支持openjdk/oracle java格式化规则
目前我使用spotless的配置如下
spotless {
java {
toggleOffOn()
eclipse().configFile("${project.rootDir}/tools/eclipse-java-formatter.xml")
indentWithSpaces()
removeUnusedImports()
}
}
对于intellij集成,我安装了eclipse代码格式化程序插件,并将其配置为使用与spotless相同的规则。
此方法满足除2.2之外的所有上述要求,即intellij生成的任何代码在符合格式规则之前必须重新格式化。另一个问题是,在重新格式化代码时,导入似乎被任意重新排序。这会产生许多虚假的更改,这使得pull请求更难审查。
有没有其他方法(如checkstyle)不存在这些缺点?
5条答案
按热度按时间gkn4icbw1#
我想你可以用p3c插件
ukqbszuj2#
您可以使用googlejava格式,它有用于上述ide(intellij idea,eclipse)的插件,它提供了与maven、gradle或sbt等工具的集成,并提供了将格式化程序作为预提交钩子运行或使用github操作将代码推送到github时运行格式化程序的方法。
在他们的自述中,他们还提到了导入问题以及如何为intellij idea解决这个问题,并提供了更多的见解,例如:如何在spotless gradle插件上处理它,何时使用maven spotless插件,或者github操作。
您的具体案例的一个缺点可能是该工具强制执行googlejava风格指南,正如oraclejava杂志所描述的那样,该指南受到oraclejava团队的赞扬和推荐。它还提供了使用aosp代码样式的选项。
下面是一段关于一尘不染渐变配置的代码片段,考虑到导入顺序:
jaql4c8m3#
我可以帮你。在这里,您主要提出了两个问题:
通过“重新格式化代码”操作,可以在ide中修复格式错误的代码
为此,您需要编写一个代码模板。我们在组织中使用特定的代码模板。现在,您需要在“设置”>“代码样式”下导入此xml代码模板。现在,默认情况下,代码将按照编写模板的方式进行格式化。或者使用ctrl+shift+f作为eclipse快捷方式(在intellij中启用)。对openjdk/oraclejava格式规则的支持可以在同一个模板中处理。请将它们的代码模板作为eclipse中提供的默认模板。
ide生成的代码(例如getter/setter生成)符合规则
这个链接会有帮助。请进一步探讨如何编写自定义代码模板。
为了限制所有开发人员不推送错误格式的代码,您需要编写一个git钩子。它将不允许推送代码,除非代码符合钩子的自定义脚本中提供的基本规则。没有人需要在本地intellij上执行任何操作,git钩子将从远程git repo执行操作。这里有一个支持链接。
我在这里提供了清晰的信息,因为更多的是自定义规则的问题,这些规则将出现在您的代码模板中。
其他问题:检查代码格式是否正确的任务。如果提交的代码格式不正确,这将用于ci以导致生成失败。
当您使用git钩子限制提交的代码时,repo上永远不会有任何未格式化的代码。因此,您不需要将其作为ci构建的一部分。这可以通过提供一个管道脚本来完成,该脚本将触发一个具有代码git位置的方法。在我看来这是件乏味的事。希望你的问题都能回答。
3hvapo4f4#
我使用格式化maven插件和导入maven插件
这些插件有validate/check目标,我在ci工具中使用这些目标来验证传入的pr。
它们也有渐变变体。在这里结账
jecbmhm35#
checkstyle支持您的大多数需求。
渐变集成:
它不会自动修复代码(afaik)。
intellij集成:
有一个checkstyle插件,你可以配置它在你编码的时候显示警告。
您还可以配置intellij自动格式化以使用这些规则。
格式化规则
以下是checkstyle中oracle/sun规范的配置。