【问题标题】:Java web app on Heroku: Unable to access jarfileHeroku 上的 Java Web 应用程序:无法访问 jarfile
【发布时间】:2015-12-06 01:15:15
【问题描述】:

我正在尝试将我的 Java Spring Boot Web 应用程序部署到 Heroku。

要在本地启动它,我运行:

mvn install

然后

java $JAVA_OPTS -jar target/*.war

所以对于 Heroku,我创建了 Procfile: web: java $JAVA_OPTS -jar target/*.war

我使用 Heroku Github 集成,应用程序从 Github 部署到 Heroku。所以我只是把它推到那里。

但应用程序没有启动。

heroku logs --app myapp 给我:

2015-09-09T21:53:25.581128+00:00 heroku[web.1]: Starting process with command `java $JAVA_OPTS -jar target/*.war`
2015-09-09T21:53:27.110820+00:00 app[web.1]: Error: Unable to access jarfile target/*.war`

heroku run bash --app myappls -a 不显示 target 目录。

我认为 Heroku 不会构建应用程序。 但我做错了什么?提前感谢您的建议!

【问题讨论】:

  • 当您说“应用程序已从 Github 部署到 Heroku,所以我只是将其推送到那里”是否意味着您正在使用 Heroku GitHub Integration?您可以签入您的Heroku Dashboard 以确认部署成功吗?
  • @codefinger 感谢您的评论,构建日志是正确的方向。

标签: java maven heroku github spring-boot


【解决方案1】:

而不是mvn installmvn package 知道差异检查http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

使用 Heroku Maven 插件部署 WAR 文件允许您 将部署流程与您现有的 Maven 流程集成。这 Heroku 插件使用你的 mvn 包阶段生成的工件, 并将它们构建到上传到 Heroku 的 Slug 文件中 服务器。

这样,Heroku Maven 插件避免了 远程重新编译您的项目。这通常是首选 从可能已经构建的 CI 服务器部署时的方法 您的 WAR 文件并对其进行了测试。

来源:https://devcenter.heroku.com/articles/war-deployment#deployment-with-the-heroku-maven-plugin

关于部署 Spring Boot,有几个步骤:

  • 配置端口

    web: java -Dserver.port=$PORT -jar target/demo-0.0.1-SNAPSHOT.jar

  • 指定JDK,默认为1.8(Maven中指定1.8无需更改)

查看http://docs.spring.io/spring-boot/docs/current/reference/html/cloud-deployment-heroku.html

要执行 Procfile,请使用 heroku local

【讨论】:

  • 感谢您的回复。我知道 Maven Heroku 插件,但我希望通过其 Github 集成来使用 Heroku。另外我相信 maven install 步骤是在 package 之后调用的,结果(构建的 war 文件)是相同的,所以没关系。
【解决方案2】:

我找到了错误的原因。这是构建日志的一部分:

-----> Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
       Detected buildpacks: Node.js, Java
       See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order
-----> Node.js app detected
-----> Creating runtime environment

根据 Heroku build order 的说法,该应用程序被认为是 NodeJS 之一。所以解决方案是设置java build pack:

heroku buildpacks:set https://github.com/heroku/heroku-buildpack-java

然后将任何更改推送到应用程序以使其重建。

【讨论】:

    【解决方案3】:
    1. pom.xml 中的打包部分应该始终是 war,而不是 jar
    2. 将 java buildpack 放在优先级 1 和 nodejs 放在优先级 2 也有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-27
      • 2018-01-22
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 2012-11-04
      相关资源
      最近更新 更多