Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Deploy to Heroku按钮时,将忽略Heroku-mvnw_Java_Heroku - Fatal编程技术网

Java 使用Deploy to Heroku按钮时,将忽略Heroku-mvnw

Java 使用Deploy to Heroku按钮时,将忽略Heroku-mvnw,java,heroku,Java,Heroku,我希望Heroku在使用Deploy to Heroku按钮时运行我的mvnw脚本。目前,Heroku会忽略该脚本,下载并运行它。我的mvnw文件位于项目根目录下,并通过git正确地为755(chmod+x)赋值。当我通过控制台登录时,一切都如预期的那样(mvnw确实是dyno上的755可执行文件,并且使用/mvnw从控制台运行) 我想运行自己的mvnw的原因是我的应用程序是一个独立的胖罐子,已经在bintray上提供了。我只需要用curl下载该文件,并用Procfile运行它。下载和运行mvn

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

我想运行自己的
mvnw
的原因是我的应用程序是一个独立的胖罐子,已经在
bintray
上提供了。我只需要用curl下载该文件,并用
Procfile
运行它。下载和运行mvn只不过是浪费时间——它是可行的,但也有点过头了

所以有两个相关的问题

  • 为什么在使用Deploy to
    Heroku
    按钮时未拾取可执行文件
    mvnw
  • 有没有其他方法告诉Heroku不要运行
    mvn
    ,而是运行其他脚本来执行编译/安装

  • 编辑我的答案,因为我是一个新的投稿人,还不能发表评论(!)-一个向上投票会很好,这样我就能赢得声誉

    • 我特别需要一个“自助服务”,“无需安装”部署。这排除了安装Heroku插件和使用Heroku Maven插件的可能性

    • 使用buildpacks可以很好地与deploytoheroku按钮配合使用。应用程序使用以下方法在几秒钟内部署(根据Malak建议使用官方JDK构建包进行编辑)

      我编辑了我的
      app.json
      文件,以使用Heroku社区目录中的两个构建包

    • 第一个构建包安装Java,但不运行Maven
    • 默认情况下,第二个buildpack运行一个名为
      buildpack run.sh
      的脚本
    buildpack run.sh
    只获取一个预编译的胖jar

    #!/bin/sh -x
    curl -L "https://dl.bintray.com/.../publicresults-4.4.2.jar" -o publicresults.jar
    
    必须运行git update index--chmod=+x buildpack run.sh,这样脚本在签出时是可执行的

    为了在fat jar中运行主类,使用以下Procfile。应用程序打开Heroku通过$port提供的端口

    web: java -Dport=$PORT -Xmx512m -Xms128m -cp publicresults.jar app.owlcms.publicresults.Main
    

    Heroku的Java构建包不仅检查
    mvnw
    ,而且还检查
    .mvn/wrapper/maven wrapper.properties
    ,以确定是否应该使用maven wrapper。在
    system.properties
    中指定Maven版本时,它也不会运行。通过添加一个空的
    .mvn/wrapper/maven wrapper.properties
    ,您可能可以让它正常工作,但我不建议这样做

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

  • 你可以用它来部署你的胖罐子。这将为您上传JAR和生成的Procfile,并且在构建过程中无需安装Maven即可工作
  • 如果希望完全控制构建过程,可以编写自定义构建包。构建包本质上是一组脚本,运行这些脚本可以从源代码创建可运行的应用程序映像。这需要您方面做出一些努力,我认为Maven插件路线可能更适合您的用例,但我不想不提及这一点。您可以在此处阅读有关构建包的更多信息:

  • 另一个选项见我的答案。如果你想走自己的路,我建议你使用Heroku的官方buildpack,它是积极维护的,并且只安装JVM而不构建源代码。
    web: java -Dport=$PORT -Xmx512m -Xms128m -cp publicresults.jar app.owlcms.publicresults.Main