Spring Boot项目JSON文件格式化免NPM依赖解决方案
最简便的改造成本几乎为零:你已经在用的Spotless插件本身就提供了纯Java实现的JSON格式化能力,不需要依赖Node/NPM环境,直接替换原有prettier配置即可,完全兼容现有Jenkins、Maven构建流程。
方案一:改造现有Spotless配置(推荐)
你之前配置失败的核心原因是选用了prettier格式化器,Spotless对prettier的集成需要调用本地Node环境执行JS代码,所以才会要求预装npm。直接替换为基于Jackson实现的JSON格式化模块即可——Jackson是纯Java开发的JSON处理库,Spotless会自动通过Maven拉取对应依赖,所有格式化逻辑都在JVM内完成,只要构建节点有JDK、能正常拉取Maven依赖就可以运行,没有任何额外环境要求。
改造后的插件配置如下:
<plugin> <groupId>com.diffplug.spotless</groupId> <artifactId>spotless-maven-plugin</artifactId> <version>${spotless.version}</version> <configuration> <formats> <format> <includes> <!-- 修正原有匹配规则,覆盖所有子目录下的JSON文件,原配置仅会匹配项目根目录的json --> <include>**/*.json</include> </includes> <!-- 替换原prettier配置块,使用Jackson格式化器 --> <jackson> <config> <!-- 和你之前prettier的配置对齐,使用Tab缩进 --> <indentWithTabs>true</indentWithTabs> <!-- 如果你的JSON文件包含注释,打开下面的配置即可支持 --> <!-- <allowComments>true</allowComments> --> <!-- 按需配置是否在键值分隔符:前加空格 --> <spaceBeforeSeparator>false</spaceBeforeSeparator> </config> </jackson> </format> </formats> </configuration> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
配置改完后执行一次mvn spotless:apply,就可以批量格式化项目里所有存量JSON文件,之后正常执行mvn clean install时的格式校验步骤就会正常运行,不会再出现缺npm的报错。
- 本地开发环境不需要装任何额外工具,和之前的构建体验完全一致
- Jenkins节点不需要做任何改造,只要能正常跑Maven构建就可以通过格式校验
- 格式化规则和你之前的prettier配置对齐,不会出现大面积格式变动
方案二:复用现有pre-commit钩子做提交前格式化
如果你希望把格式校验完全前移到代码提交环节,进一步降低构建环节的耗时,可以把JSON格式化逻辑直接加到你现在已经在用的pre-commit钩子中,和google-java-format的逻辑放在一起:
- 在钩子脚本中直接调用
mvn spotless:apply处理暂存区的JSON文件,因为项目本身就依赖Maven环境,不需要额外安装任何工具 - 提交时自动格式化修改过的JSON文件,从源头避免格式不规范的代码提交
- 注意这种方式需要保留Maven侧的check配置作为兜底,避免开发者加
--no-verify参数跳过钩子提交不规范代码
避坑说明
不要选用需要全局安装命令行工具的方案(比如全局安装prettier、jq等),这类方案需要给所有开发机、所有Jenkins节点做环境初始化,推广成本高,后续新节点接入很容易漏装环境导致构建失败。纯Maven托管依赖的方案一致性最好,一次配置永久生效,没有额外运维成本。
内容的提问来源于stack exchange,提问作者Sharad

