部署Java+libGDX HTML游戏到Heroku时compileGwt报错求助
解决libGDX HTML游戏部署Heroku时的UnsupportedClassVersionError问题
核心问题分析
报错UnsupportedClassVersionError: jsinterop/annotations/JsProperty类文件版本为55.0(Java 11编译),当前运行时仅支持最高52.0版本(Java 8),本质是依赖中存在Java 11编译的Jsinterop库,但Heroku编译环境默认用Java 8运行,导致版本不兼容。
具体修复步骤
1. 全局锁定Java版本
在根项目的build.gradle中添加全局配置,确保所有子模块统一使用Java 8:
allprojects { apply plugin: "java" sourceCompatibility = 1.8 targetCompatibility = 1.8 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } }
2. 强制使用Java 8兼容的Jsinterop依赖
在html模块的build.gradle中,明确指定兼容Java 8的Jsinterop版本,并强制替换可能存在的高版本依赖:
dependencies { // 保留原有其他依赖 implementation 'com.google.jsinterop:jsinterop-annotations:2.0.0' implementation 'com.google.jsinterop:base:1.0.0' } configurations.all { resolutionStrategy.force 'com.google.jsinterop:jsinterop-annotations:2.0.0' resolutionStrategy.force 'com.google.jsinterop:base:1.0.0' }
3. 配置Heroku的Java运行时
在项目根目录创建system.properties文件,指定Heroku使用Java 8:
java.runtime.version=1.8
如果打算升级到Java 11,需确保GWT版本在2.9.0及以上,同时将sourceCompatibility和targetCompatibility改为11。
4. 给GWT编译任务单独指定Java版本
在html模块的build.gradle中,为compileGwt任务指定Java 8工具链:
tasks.named('compileGwt') { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(8) } }
5. 清理缓存重新构建
- 本地执行
./gradlew clean清除旧编译文件 - 部署前清理Heroku缓存:
heroku builds:cache:purge -a your-app-name
验证流程
- 本地执行
./gradlew html:stage确认编译正常 - 推送代码到Heroku,观察
compileGwt任务是否成功执行
内容的提问来源于stack exchange,提问作者Flaschix
相关产品推荐
相关产品推荐

