WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective

本文介绍了在使用MyBatis和Spring集成时遇到的非法反射访问操作警告,该警告可能由于MyBatis版本过低引起。通过升级MyBatis到3.5.2版本并确保mybatis-spring版本与之对应(2.0.2),可以解决此问题。未匹配的版本会导致AbstractMethodError,影响事务管理。因此,保持MyBatis和mybatis-spring版本一致至关重要。

WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective acces

报错:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.catalina.loader.WebappClassLoaderBase (file:/D:/Apache%20Software%20Foundation/apache-tomcat-9.0.13/lib/catalina.jar) to field java.io.ObjectStreamClass$Caches.localDescs
WARNING: Please consider reporting this to the maintainers of org.apache.catalina.loader.WebappClassLoaderBase
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

原因:

我的原因是因为mybatis的版本太低了(maybe),反正改的改一点之后就没报错了。

解决办法:

把mybatis的版本改成了3.5.2

<!-- MyBatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>

然后就没再报错了。

如果配置文件中还有mybatis-spring,那也要修改其版本。

如果不修改,spring-mybatis和mybatis版本不匹配,会产生冲突,

报错:java.lang.AbstractMethodError:

         org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout() 

所以,mybatis 与mybatis-spring 版本一定要对应。

 <!-- MyBatis 与 Spring 整合 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.2</version>
            </dependency>

 

 

<think>好的,我现在需要解决用户关于Jenkins出现“非法反射访问操作”警告的问题。用户提到的是Java的反射访问警告,这通常发生在使用较新版本的Java运行旧版本的库或代码时。首先,我需要回忆一下Java 9引入的模块化系统,因为这个问题通常与模块系统的访问限制有关。 首先,用户可能使用的是Java 11或更高版本运行Jenkins,而Jenkins的某些插件或依赖可能没有更新到兼容的版本。这时候,Java会抛出这样的警告,提示有代码通过反射访问了内部API,这在未来的版本中可能会被禁止。 接下来,我需要考虑常见的解决方案。通常,解决方法包括升级Jenkins到最新版本,因为新版本可能已经修复了这些兼容性问题。另外,检查插件是否更新也很重要,因为过时的插件可能依赖旧库。如果升级后问题依旧,可能需要调整Java的启动参数,比如添加`--add-opens`来允许特定的模块被反射访问。 还要考虑用户的环境,比如他们使用的Jenkins版本、Java版本以及具体的警告信息内容。不同的警告可能需要不同的模块开放。例如,如果警告涉及`java.base/java.lang`,那么对应的启动参数应该是`--add-opens java.base/java.lang=ALL-UNNAMED`。 此外,用户可能需要检查是否有自定义的插件或脚本导致这个问题。如果是内部开发的插件,可能需要修改代码以避免使用反射访问内部API。不过,对于大多数用户来说,更实际的方法可能是通过调整JVM参数来暂时抑制警告,同时等待官方更新。 最后,需要提醒用户,虽然添加JVM参数可以解决警告,但这只是一个临时措施,长期解决方案还是需要升级到修复后的版本。同时,注意不要随意开放所有模块,以免带来安全风险。 总结步骤应该是:1. 升级Jenkins;2. 更新所有插件;3. 添加必要的JVM参数;4. 检查自定义代码或插件。如果用户无法立即升级,提供具体的启动参数示例会很有帮助。另外,参考信息中的ZOOKEEPER相关问题可能不直接相关,但说明软件更新常解决此类兼容性问题,可以引用作为类似情况的处理方式。</think>### Jenkins 'illegal reflective access operation' 警告解决方案 Jenkins 在启动或运行时出现 `illegal reflective access operation` 警告,通常是由于 Java 9+ 模块系统对反射操作的限制引起的[^1]。以下是分步解决方案: --- #### **1. 升级 Jenkins 及插件** - **原因**:旧版 Jenkins 或插件可能使用了不兼容新 Java 版本的反射操作。 - **操作**: 1. 升级 Jenkins 到最新长期支持版(LTS)。 2. 在 Jenkins 管理界面更新所有插件。 - **示例命令**(通过 Docker): ```bash docker pull jenkins/jenkins:lts ``` --- #### **2. 调整 JVM 启动参数** - **原因**:通过开放特定模块权限,临时允许反射访问。 - **操作**: 修改 Jenkins 启动脚本(如 `jenkins.sh` 或 `systemd` 服务文件),添加以下参数: ```bash JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED" ``` - **注意**:需根据具体警告内容调整模块名(如 `java.base/java.io`)。 --- #### **3. 降级 Java 版本(临时方案)** - **原因**:Java 8 无模块系统限制,但长期不推荐。 - **操作**: 安装 Java 8 并配置 Jenkins 使用: ```bash sudo update-alternatives --config java # 选择 Java 8 ``` --- #### **4. 检查自定义插件或脚本** - **原因**:自行开发的插件可能包含非法反射代码。 - **操作**: 1. 使用 `mvn dependency:tree` 检查依赖冲突。 2. 替换或更新使用 `sun.*` 等内部 API 的代码。 --- #### **总结** | 方案 | 适用场景 | 优先级 | |--------------|---------------------------|--------| | 升级 Jenkins | 官方已修复兼容性问题 | 高 | | 调整 JVM 参数| 临时解决警告 | 中 | | 降级 Java | 紧急情况下短期使用 | 低 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值