Spotless处理Java文本块时格式化异常问题求助
Spotless处理Java文本块时格式化失效问题
问题说明
Spotless搭配Google Java Format插件时,处理包含Java文本块的文件无法清除代码中的多余空格;但处理普通字符串的文件时,格式化功能正常。使用Eclipse Java格式化器也存在类似(但不完全一致)的问题。
插件配置
Spotless Maven插件的配置如下:
<plugin> <groupId>com.diffplug.spotless</groupId> <artifactId>spotless-maven-plugin</artifactId> <version>2.43.0</version> <configuration> <java> <googleJavaFormat> <version>1.17.0</version> </googleJavaFormat> <indent> <tabs>true</tabs> <spacesPerTab>2</spacesPerTab> </indent> <indent> <spaces>true</spaces> <spacesPerTab>4</spacesPerTab> </indent> </java> </configuration> </plugin>
复现案例
格式化失效的文本块代码
执行spotless:apply命令后,test()方法后的多余空格仍未被清除:
class SomeTest { @Test void test() { assertThat(""" """).isEqualTo("\n"); } }
格式化正常的普通字符串代码
执行spotless:apply命令后,test()方法后的多余空格被正确清除:
class SomeTest { @Test void test() { assertThat("\n").isEqualTo("\n"); } }
排查与解决建议
- 升级Google Java Format版本:当前使用的1.17.0版本对Java文本块的格式化支持可能存在缺陷,升级到1.20.0及以上版本,新版本通常会修复文本块相关的格式化逻辑问题。
- 清理冲突的缩进配置:配置中同时定义了tabs和spaces两种缩进规则,可能导致格式化逻辑冲突,建议只保留一种缩进规则(要么使用tab缩进,要么使用空格缩进),避免规则冲突影响文本块的处理。
- 核对文本块格式化规则:Java文本块的空白处理有特殊语法逻辑,Google Java Format可能为了保留文本块内的格式,误判了代码其他部分的空格清理逻辑,可查阅相关文档确认文本块的格式化规则细节。
内容的提问来源于stack exchange,提问作者Joseph K. Strauss
相关产品推荐
相关产品推荐

