升级Java17与Gradle8.0.2后STS无法打开Java类求助
解决STS 4升级Java 17+Gradle 8.0.2后无法打开Java类的异常
这个异常是Java模块系统的权限限制导致的——STS的类加载器试图通过反射访问Java核心模块的内部API,而Java 17默认禁止这种跨模块的非授权访问。以下是具体解决步骤:
1. 升级STS到兼容Java 17的版本
旧版本STS(比如4.15及更早)对Java 17的支持不完善,建议直接升级到STS 4.16及以后的稳定版本,新版本已经针对Java 17的模块系统做了适配,大概率能直接解决问题。
2. 给STS添加VM启动参数(如果暂时不升级)
修改STS安装目录下的sts.ini文件,在-vmargs下方添加以下参数,开放Java核心模块对未命名模块的反射权限:
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED
保存后重启STS即可生效。
3. 检查并修正项目的JDK配置
确保项目的编译、运行环境都切换到Java 17:
- Gradle配置:在项目的
build.gradle中确认Java版本设置:plugins { id 'java' } java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } // 如果是Spring项目,还要确认Spring Boot版本兼容Java 17(比如2.7+或3.x) - STS项目配置:
- 右键项目 →
Properties→Java Build Path,确认JRE System Library使用的是Java 17; - 右键项目 →
Properties→Java Compiler,勾选Enable project specific settings,将Compiler compliance level设置为17。
- 右键项目 →
4. 清理重建项目
- 执行Gradle任务:右键项目 →
Gradle→Run Gradle Tasks,运行clean和build; - STS中执行:
Project→Clean...,选择当前项目清理; - 刷新Gradle项目:右键项目 →
Gradle→Refresh Gradle Project。
内容的提问来源于stack exchange,提问作者siva
相关产品推荐
相关产品推荐

