Heroku部署Java Discord机器人Maven报invalid target release:17错误
问题描述
基于Java开发Discord机器人时,本地使用OpenJDK 17.0.2环境开发,pom.xml已配置编译目标为Java 17,本地运行正常。通过GitHub将项目部署到Heroku实现7*24小时运行时,Maven构建失败,核心报错如下:
[INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.970 s [INFO] Finished at: 2022-07-15T15:44:01Z [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project gloombot: Fatal error compiling: invalid target release: 17 -> [Help 1] [ERROR] ! ERROR: Failed to build app with Maven ! Push rejected, failed to compile Java app. ! Push failed
附本地相关配置参考:
- pom.xml中编译参数配置:
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
- 本地JDK版本查询结果:
openjdk version "17.0.2" 2022-01-18 OpenJDK Runtime Environment (build 17.0.2+8-86) OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
故障原因
Heroku的默认Java构建环境使用的JDK版本低于17,不支持Java 17作为编译目标版本,因此触发invalid target release: 17报错,和本地环境、项目代码、pom.xml本地配置无关。
解决步骤
- 在项目根目录新建名为
system.properties的配置文件 - 在文件内写入配置,指定Heroku构建时使用的JDK版本:
java.runtime.version=17
- 将该文件提交到Git仓库,重新推送触发Heroku构建即可。
可选配置:如果需要指定精确的JDK小版本,可以直接写全版本号,例如
java.runtime.version=17.0.2,Heroku会拉取对应版本的OpenJDK完成构建。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

