首页 > 解决方案 > Heroku - 使用 Deploy to Heroku 按钮时忽略 mvnw

问题描述

我希望 Herokumvnw在使用 Deploy to Heroku 按钮时运行我的脚本。目前 Heroku 会忽略脚本,下载mvn并运行它。我的mvnw文件位于项目根目录中,并且确实通过 git 正确地赋予了 755 (chmod+x) 属性。当我通过控制台登录时,一切都如预期的那样(在测功机mvnw上确实是 755 可执行文件,并且确实从控制台运行./mvnw)。

我想自己运行的原因mvnw是我的应用程序是一个独立的胖 jar,已经在bintray. 我只需要使用 curl 下载文件并使用Procfile. 下载和运行 mvn 只是浪费时间 - 它可以工作,但有点过分了。

所以两个相关的问题真的

  1. 为什么使用“部署到”按钮mvnw时未拾取可执行文件。Heroku
  2. 有没有另一种方法告诉Heroku不要运行mvn,而是运行其他一些脚本来执行编译/安装。

标签: javaheroku

解决方案


Heroku 的 Java buildpack 不仅检查mvnw,而且.mvn/wrapper/maven-wrapper.properties确定是否应该使用 Maven 包装器。当您在system.properties. 您可能可以通过添加一个 empty 来使其工作.mvn/wrapper/maven-wrapper.properties,但我不建议您走这条路线。

看起来您不想实际使用 Maven 包装器,而是使用自定义构建脚本来构建您的应用程序。您在这里有两个选择:

  1. 您可以使用Heroku 的 Maven 插件来部署您的 fat-jar。这将为您上传 JAR 和生成的 Procfile,并且在构建过程中无需安装 Maven 即可工作。
  2. 如果您想完全控制构建过程,您可以编写自定义构建包。Buildpacks 本质上是一堆脚本,运行这些脚本以从您的源代码创建可运行的应用程序映像。这需要您付出一些努力,我认为 Maven 插件路由可能更适合您的用例,但我不想不提及这一点。您可以在此处阅读有关构建包的更多信息:https ://devcenter.heroku.com/articles/buildpack-api

推荐阅读