无法使用 Maven 构建应用程序,我可以在本地运行代码,但无法在 heroku 上部署
Posted
技术标签:
【中文标题】无法使用 Maven 构建应用程序,我可以在本地运行代码,但无法在 heroku 上部署【英文标题】:Failed to build app with Maven, I can run code locally, but fail to deploy on heroku 【发布时间】:2019-06-17 16:16:43 【问题描述】:这是我在 github 中的代码: https://github.com/q463746583/CS4500-Assignment2 我可以在本地成功运行它, 但是当我尝试在heroku上部署代码时, 有错误说明:
[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/com/thoughtworks/qdox/qdox/2.0-M9/qdox-2.0-M9.jar (317 kB at 6.0 MB/s)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 4 source files to /tmp/build_3c4f3b86a26f6e3ae1cbe89639f79f26/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.261 s
[INFO] Finished at: 2019-01-24T00:47:07Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project myapp: Fatal error compiling: invalid target release: 11 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
! ERROR: Failed to build app with Maven
We're sorry this build is failing! If you can't find the issue in application code,
please submit a ticket so we can help: https://help.heroku.com/
! Push rejected, failed to compile Java app.
! Push failed
【问题讨论】:
【参考方案1】:我在 Heroku 中部署 git 项目时遇到了同样的错误。我刚刚将 java.version
从 pom.xml
中的 11 更改为 8,它对我有用:
<properties>
<java.version>8</java.version>
</properties>
【讨论】:
【参考方案2】:TLDR:
-
确保您使用适当的 JAVA JDK
检查您的来自 Maven 编译器的目标环境是否与您的目标 Heroku JAVA 运行时相同。
如果您不使用默认的 JAVA 8 JDK 运行时环境在您的项目中创建一个 system.properties 文件,指定不同的受支持的 JAVA 运行时环境,如 Heroku 的JAVA buildpack 文档。
我认为这与您的 Heroku 上的目标 Java 运行时环境与您的 本地编译的代码(由 Maven 编译器生成)之间的不匹配有关, 你试图将其推送到 Heroku。
根据 Heroku 的documentation:
Heroku 目前默认使用 OpenJDK 8 来运行您的应用程序。 OpenJDK 版本 9 和 7 也可用。
其他支持的默认版本有:
Java 7 - 1.7.0_181 Java 8 - 1.8.0_191 Java 9 - 9.0.4 Java 10 - 10.0.2 Java 11 - 11因此,您应该确保在您的 pom.xml 文件中,您的 maven 编译器正在将您的 JAVA 代码编译为您在 Heroku 上定位的适当的 JAVA buildpack。例如,下面我们针对的是 Java 7 运行时环境:
pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
然后,如果您的目标是 Heroku 的默认 JDK 1.8 运行时环境以外的运行时环境,则应该在项目中创建一个 system.properties
文件。您可以通过指定所需的 java 运行时环境来做到这一点,如下所示:
system.properties:
java.runtime.version=11
【讨论】:
【参考方案3】:要消除此错误,只需在您的存储库中添加一个名为 system.application
的额外文件和
java.runtime.version=11
【讨论】:
【参考方案4】:根据之前的答案,创建一个 system.properties 文件,使用该更改进行新提交并重新运行 heroku 命令为我解决了这个问题。
另外,如果您不使用 main 作为主分支,请注意您的分支名称,因为这需要匹配,例如。
git push heroku master:main
或
git push heroku develop:main
【讨论】:
以上是关于无法使用 Maven 构建应用程序,我可以在本地运行代码,但无法在 heroku 上部署的主要内容,如果未能解决你的问题,请参考以下文章
如何将本地 Maven m2 作为属性传递给 Gradle?
如何为 GitLab CI 运行器启用 Maven 工件缓存?
无法计算构建计划:artifact org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3 在本地存储库中不可用