**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
我们不允许问题寻求有关书籍、工具、软件库等的推荐。你可以编辑问题,以便可以使用事实和引用来回答问题。
昨天关门了。
Improve this question
我尝试引入一个工具来标准化我们的java代码格式。要求是:
- 所需格式应为Oracle标准(或非常相似的格式)
- 应遵守多行语句,即如果用户为了可读性而添加换行符以将语句拆分为多行,则不应删除这些换行符(见上文)
- Gradle集成。如果提交的代码不符合规则,构建应该失败。
- 自动修复-通过(Gradle)命令重新格式化代码以符合规则
- IDE集成-重新格式化代码以符合IntelliJ、VSCode等中的规则。EditorConfig可能对此很有用。
我试过使用Spotless,但是它格式化多行语句的方式很不令人满意。
var token = Jwts.builder()
.signWith(Keys.hmacShaKeyFor(signingKey), SignatureAlgorithm.HS512)
.setHeaderParam("typ", SecurityConstants.TOKEN_TYPE)
.setIssuer(SecurityConstants.TOKEN_ISSUER)
.claim("rol", roles)
.setAudience(SecurityConstants.TOKEN_AUDIENCE)
.setSubject(user.getUsername())
.setExpiration(Timestamp.valueOf(tomorrow))
.addClaims(user.getClaims())
.compact();
将无法通过Spotless检查,并且如果运行./gradlew spotlessApply,它将被重新格式化为这种可怕的混乱状态
var token = Jwts.builder().signWith(Keys.hmacShaKeyFor(signingKey), SignatureAlgorithm.HS512)
.setHeaderParam("typ", SecurityConstants.TOKEN_TYPE).setIssuer(SecurityConstants.TOKEN_ISSUER)
.claim("rol", roles).setAudience(SecurityConstants.TOKEN_AUDIENCE).setSubject(user.getUsername())
.setExpiration(Timestamp.valueOf(tomorrow)).addClaims(user.getClaims()).compact();
因此,Spotless的行为就像一个模糊器。有没有一个工具可以满足以上的大部分/所有要求?
1条答案
按热度按时间aiazj4mn1#
我试过使用Spotless,但是它格式化多行语句的方式非常不令人满意。
Spotless允许您指定自定义规则以满足您的要求:https://github.com/diffplug/spotless/tree/main/plugin-gradle#custom
Checkstyle是另一个很好的强制格式化工具,它被Spring Framework团队使用,它也有一个excellent plugin for IntelliJ。
所以建议是:
1.尝试为Spotless编写自定义规则以满足您的需要。
1.如果(1)不令人满意,请研究如何将Checkstyle与自定义检查一起使用。
如果提交的代码不符合规则,则生成应该失败。
有几种方法可以处理这个问题:
无论你使用哪种格式的插件,都有一个相关的
check
任务,所以对于Spotless来说就是spotlessCheck
,Checkstyle就是check
。您可以将
build
任务配置为对这些任务具有任务依赖性。另一种方法是在您的管道中有一个调用您配置的检查任务的检查。