JDK11执行mvn clean install时SpotBugs报Security Manager相关错误
问题现象
执行mvn clean install构建命令时抛出如下报错:
spotbugs failed: java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
已知环境信息:
- 本地安装JDK版本:JDK 11
- 项目配置指定编译/运行JDK版本:JDK 11
- 设备环境:搭载M1芯片的MacBook Pro
- 公开资料显示该报错此前普遍在JDK 17及以上版本环境中出现
报错截图:
问题产生原因
报错触发的核心逻辑是低版本SpotBugs Maven插件主动调用System.setSecurityManager()接口,和本地运行的JDK大版本无绝对绑定关系:
M1芯片Mac的早期ARM架构适配版JDK 11(多为2022年上半年之前发布的构建版本)提前合入了高版本JDK中JEP 411对应的安全管理器弃用校验逻辑,调用安全管理器设置接口时会直接抛出UnsupportedOperationException,触发逻辑和JDK 17及以上版本完全一致,因此会出现明明配置使用JDK 11,却抛出高版本JDK专属报错的现象。4.7.0以下版本的SpotBugs插件未做该场景的兼容,遇到上述校验就会直接中断构建。
解决方法
按优先级从高到低可选择以下方案:
- 升级SpotBugs Maven插件到4.7.0及以上版本,高版本已适配安全管理器弃用逻辑,不会主动调用相关API触发报错。在项目pom.xml中修改插件配置即可,参考配置如下:
<plugin> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-maven-plugin</artifactId> <version>4.7.3.4</version> </plugin>
- 如果暂时无法升级插件版本,可在执行构建命令时追加JVM参数,跳过安全管理器的相关校验,命令示例:
mvn clean install -Dspotbugs.jvmArgs="-Djava.security.manager=allow" - 检查本地安装的JDK 11版本,如果是2022年之前发布的早期ARM适配JDK 11,替换为当前最新维护的JDK 11 ARM架构发行版即可,无需调整项目配置。
内容的提问来源于stack exchange,提问作者user11255252
相关产品推荐
相关产品推荐

