Heroku部署Java应用失败:maven-compiler-plugin报无效参数--release
解决Heroku部署Java应用时maven-compiler-plugin构建失败问题
问题原因分析
你遇到的invalid flag: --release错误核心是版本配置冲突与插件参数不兼容:
- maven-compiler-plugin 3.11.0默认会使用
--release参数指定编译版本,但该参数仅Java 9及以上版本支持; - pom.xml中同时配置
java.version=11和maven.compiler.source/target=1.8,版本冲突导致插件尝试执行无效的--release 1.8指令; - 在application.properties中添加
java.runtime.version=11是错误操作,Heroku不通过该文件识别JDK版本,因此会抛出无法解析的警告。
具体解决方案
方案1:统一使用Java 11编译和运行
调整pom.xml中的编译配置,确保版本统一:
<properties> <java.version>11</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.release>${java.version}</maven.compiler.release> </properties>
同时在项目根目录创建system.properties文件,指定Heroku使用的JDK版本:
java.runtime.version=11
方案2:坚持使用Java 8编译(兼容旧版本)
若需编译为Java 8版本,需调整maven-compiler-plugin配置以规避--release参数:
- 降低插件版本至3.8.x(3.9及以上版本默认启用
--release):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <!-- 移除release相关配置 --> </configuration> </plugin>
- 在
system.properties中指定Heroku的JDK版本(可用Java 11兼容运行Java 8编译的代码,或直接指定1.8):
java.runtime.version=11
额外检查
- 本地测试时,通过
mvn -v查看当前Maven使用的JDK版本,确保与配置一致; - 提交代码前,先在本地执行
mvn clean compile验证编译正常,再部署到Heroku。
内容的提问来源于stack exchange,提问作者Pedro Luiz
相关产品推荐
相关产品推荐

