You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Bazel Java目标时出现java.lang.UnsupportedClassVersionError的原因

解决Bazel编译用JDK15但运行用默认JDK11的版本不兼容问题

问题描述

执行Bazel命令指定用JDK15编译并运行官方Java示例项目:

bazel run --java_language_version="15" //:ProjectRunner

观察到Bazel已下载Zulu JDK15完成编译,但运行时抛出版本不兼容错误:

java.lang.UnsupportedClassVersionError: com/example/ProjectRunner has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 55.0

已确认代码是用JDK15(类文件版本59.0)编译,但运行环境是JDK11(最高支持55.0),疑惑为何Bazel运行时未沿用编译用的JDK15。

核心原因

--java_language_version参数仅控制编译阶段的行为:指定Java语言版本标准,并调用对应版本的JDK完成编译。但Bazel的运行阶段默认会使用系统默认JDK,或Bazel自身配置的运行时JDK,不会自动关联编译用的JDK版本。

解决方案

1. 运行时显式指定JDK版本

在命令中添加--java_runtime_version参数,指定与编译版本匹配的JDK:

bazel run --java_language_version="15" --java_runtime_version="zulu_15" //:ProjectRunner
  • 若使用本地自定义JDK路径,可替换为具体路径:
    bazel run --java_language_version="15" --java_runtime_version="/usr/lib/jvm/zulu-15" //:ProjectRunner
    

2. 项目级全局配置

在项目根目录创建.bazelrc文件,添加以下配置,后续无需每次命令手动指定参数:

# 编译阶段默认用JDK15
build --java_language_version=15
# 运行阶段默认用JDK15
run --java_runtime_version=zulu_15

之后直接执行bazel run //:ProjectRunner即可自动使用JDK15编译和运行。

3. 检查并修改Bazel全局默认配置

执行以下命令查看Bazel当前默认使用的运行时JDK:

bazel info java-runtime

若需要全局修改(所有项目生效),可编辑用户级配置文件~/.bazelrc或系统级配置/etc/bazel.bazelrc,添加运行时JDK指定:

run --java_runtime_version=zulu_15

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:50:16