为何Mac Big Sur系统下mvn --version显示的OS版本与实际不符
为什么
mvn --version显示的OS版本和真实版本不一致 - Maven本身不直接查询系统版本:
mvn --version输出的OS版本完全取自运行它的JDK提供的os.version系统属性,不会直接调用系统接口查询真实版本,JDK返回什么值它就显示什么值。 - 旧版JDK未适配新系统版本规则:你当前使用的JDK 8u192发布于2018年,远早于macOS Big Sur(11.x)的发布时间,该版本JDK没有适配macOS 11的版本号规则。
- 苹果系统兼容层的伪装逻辑:苹果为了避免未适配新系统的旧应用因为版本号校验异常崩溃,对所有基于macOS 11以下版本SDK编译的二进制程序,都会统一返回
10.16的伪装版本号。旧版JDK属于未适配的旧程序,拿到的就是这个伪装值,所以传递给Maven的版本也是10.16。 sw_vers是macOS原生自带的系统工具,已经适配了新版本系统的版本规则,所以可以正确返回真实的系统版本11.5.2。
修复方法
- 升级JDK 8到8u261及更高更新版本,该版本开始JDK已经修复了macOS Big Sur及以上系统的版本识别问题,可以正确返回真实系统版本。
- 也可以切换使用JDK 11、JDK 17等更高版本的LTS JDK,这些版本原生支持识别macOS 11及以上的系统版本。
内容的提问来源于stack exchange,提问作者pmpan2k
相关产品推荐
相关产品推荐

