升级OpenJDK11后编译GWT项目遇java/lang/Object找不到错误
解决OpenJDK11下GWT2.9+Ant编译“找不到java/lang/Object”的问题
核心原因
GWT编译器需要访问JDK基础类库,但Java 9及以后移除了传统的rt.jar,改用模块化结构。Ant构建时如果没正确配置引导类路径,GWT就无法定位java.lang.Object这类核心基础类。
具体修复步骤
1. 给Ant的GWT编译任务配置引导类路径
在调用GWTCompiler的<java>任务中,添加bootclasspath参数,指向OpenJDK11的核心模块文件。示例配置如下:
<java classname="com.google.gwt.dev.Compiler" fork="true" failonerror="true"> <!-- 保留你原有的classpath配置 --> <classpath> <pathelement location="gwt-user-2.9.0.jar"/> <pathelement location="gwt-dev-2.9.0.jar"/> <!-- 你的其他依赖JAR包 --> </classpath> <!-- 添加引导类路径配置 --> <jvmarg value="-Xbootclasspath/p:${java.home}/lib/jrt-fs.jar"/> <!-- 其他JVM参数 --> <jvmarg value="-Xmx1024M"/> <!-- GWT编译目标模块 --> <arg value="hashcode"/> </java>
注:
${java.home}会自动指向当前Ant运行依赖的JDK路径,需确保Ant使用的是OpenJDK11。
2. 确认GWT核心依赖版本
确保项目中gwt-user和gwt-dev的版本都是2.9.0——这是官方支持Java 11的最低GWT版本,版本不匹配会导致类路径兼容问题。
3. 强制Ant使用Java 11编译
在Ant构建文件开头指定Java版本,避免Ant默认调用低版本JDK:
<project name="你的项目名" default="compile" basedir="."> <property name="java.version" value="11"/> <property name="ant.build.javac.source" value="${java.version}"/> <property name="ant.build.javac.target" value="${java.version}"/> </project>
4. 清理缓存后重新构建
先执行Ant的clean任务清除旧编译缓存,再重新运行编译,避免残留文件干扰。
验证标准
编译日志中不再出现Unable to find class java/lang/Object错误,且目标模块编译完成,即为修复成功。
内容的提问来源于stack exchange,提问作者user4888455
相关产品推荐
相关产品推荐

