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

执行mvn install/package时Spotless插件报错,求助JDK相关解决方法

解决Spotless Maven插件与JDK模块兼容性问题

问题原因

你使用的com.diffplug.spotless:spotless-maven-plugin:2.4.2版本过于老旧,和JDK9及以上版本的模块系统不兼容。插件依赖的Google Java Format旧版本会尝试访问JDK内部的com.sun.tools.javac.util.Context类,但JDK9+的模块机制默认不对外暴露这类内部API,从而触发权限访问错误。

解决方案

方案一:升级Spotless插件版本(推荐)

直接将插件升级到适配JDK模块系统的新版本(至少3.x以上,建议用最新稳定版)。修改子项目或根项目的pom.xml中Spotless插件的配置:

<plugin>
    <groupId>com.diffplug.spotless</groupId>
    <artifactId>spotless-maven-plugin</artifactId>
    <!-- 替换为最新稳定版,例如2.37.0或更高 -->
    <version>2.37.0</version>
    <executions>
        <execution>
            <id>spotless-check</id>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
    <!-- 其余配置保持不变 -->
</plugin>

升级后重新执行mvn package或mvn clean install即可,新版本已适配JDK模块系统,无需额外配置。

方案二:给Maven添加JDK模块参数(临时 workaround)

如果暂时无法升级插件,可以在执行Maven命令时添加JVM参数,允许JDK暴露内部类给Spotless:

mvn package --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED

若在IDEA中运行Maven任务,可按以下步骤配置:

  • 打开Run/Debug Configurations
  • 找到对应的Maven运行配置(如package)
  • 在VM options中添加:--add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
  • 保存后重新运行任务

方案三:降级到JDK8(仅适合无JDK9+特性需求的场景)

如果项目不需要JDK9及以上版本的特性,可以切换项目JDK版本到JDK8(JDK8无模块系统,不会触发该权限问题):

  1. 打开IDEA的File → Project Structure,将Project SDK切换为JDK8
  2. 修改pom.xml中的maven-compiler-plugin配置,指定编译版本为1.8:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

总结

优先选择方案一,升级插件版本是最彻底的解决方式,能避免后续出现同类兼容性问题;方案二仅作为临时应急手段;方案三只适合确实不需要JDK9+特性的项目。

内容的提问来源于stack exchange,提问作者XinyuYao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:23:10