You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

运行Maven项目时无法加载org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration配置类的问题求助

解决Spring Cloud启动时cglib反射访问权限错误

看起来你的问题核心是Java 8环境下,Spring Cloud启动时cglib库尝试反射访问ClassLoader的protected方法时触发了权限异常——虽然Java 8本身没有JPMS模块系统,但这个错误说明你的项目依赖了为Java 9+设计的Spring或cglib版本,导致在Java 8下出现了兼容性问题。下面是具体的排查和解决步骤:

环境回顾

  • Java 8
  • Maven 3.8.1
  • STS 4.11.0.RELEASE
  • macOS Big Sur
  • 可正常执行mvn clean/mvn install,但运行项目时抛出InaccessibleObjectException

核心报错分析

报错堆栈的关键信息:

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(...) accessible: module java.base does not "opens java.lang" to unnamed module @50313382

这是因为你的项目中依赖的cglib版本或Spring版本过高,这些版本默认适配Java 9+的模块系统,在Java 8环境下尝试使用反射访问JDK内部API时触发了权限限制。

解决方案

1. 检查Spring Cloud与Spring Boot的版本兼容性

Spring Cloud的版本和Spring Boot是强绑定的,部分高版本Spring Cloud(如2020.0.x/Ilford及以后)要求Java 11+,而你用的是Java 8,必须降级到兼容Java 8的版本:

  • 推荐组合:Spring Cloud Hoxton.SR12 + Spring Boot 2.3.12.RELEASE(均支持Java 8)
  • pom.xml中调整Spring Cloud的依赖管理:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

2. 强制指定兼容Java 8的cglib版本

如果是cglib版本冲突导致的问题,可以在pom.xml中显式声明兼容Java 8的cglib版本(推荐3.3.0),覆盖依赖树中的高版本:

<dependencies>
    <!-- 显式指定cglib版本 -->
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.3.0</version>
    </dependency>
</dependencies>

执行mvn dependency:tree命令可以查看当前依赖的cglib版本,确认是否有冲突并排除不兼容的版本。

3. 添加JVM启动参数(临时应急方案)

如果需要快速验证,可以在STS的运行配置中添加以下VM参数,临时开放反射访问权限:

--add-opens java.base/java.lang=ALL-UNNAMED

注意:这只是临时解决方法,不推荐长期使用,还是建议通过版本适配彻底解决问题。

4. 验证Maven依赖一致性

执行mvn clean install -U强制更新依赖,确保所有依赖都下载正确,没有缓存的旧版本或冲突版本。

总结

不需要更换Maven版本(3.8.1兼容Java 8),核心问题是Spring Cloud/Spring Boot/cglib版本与Java 8不兼容,优先通过调整Spring Cloud和Spring Boot的版本到兼容Java 8的组合来解决,其次是强制指定cglib版本。

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

火山引擎 最新活动