You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:33:25