【问题标题】:Unable to access jar when running gradle dropwizard app deployed on heroku运行部署在heroku上的gradle dropwizard应用程序时无法访问jar
【发布时间】:2026-01-29 23:05:01
【问题描述】:

我正在尝试在 heroku 上部署一个无法启动的 dropwizard 应用程序。 它在本地使用“gradle run server config.yml”可以正常工作

我正在使用 gradle 进行构建,当我推送到 heroku 时,构建成功。 我的 gradle 阶段任务依赖于 clean and jar(fat jar creation)

我的 Procfile 有:

web: java $JAVA_OPTS -jar dropwizard-app/build/libs/dropwizard-app.jar server dropwizard-app/config.yml

上述失败并显示“无法访问 jarfile dropwizard-app/build/libs/dropwizard-app.jar”

我尝试过没有成功

web: java $JAVA_OPTS -jar build/libs/dropwizard-app.jar server config.yml

我也尝试过使用 gradle 命令执行

web: gradle run server config.yml

这给出了一个错误 bash:找不到 gradle 命令

我的gradle任务如下:

    task stage(dependsOn: ['clean', 'jar'])

    run {
        args 'server', 'config.yml'
    }

    jar {
        manifest {
            attributes  'Title': 'dropwizard-app', 'Version': version,'Main-Class':  mainClassName
        }
        archiveName 'dropwizard-app'
        dependsOn configurations.runtime
        from {
            configurations.compile.collect {it.isDirectory()? it: zipTree(it)}
        }
    }

我在这里错过了什么吗? 如何启动我的 dropwizard 应用程序?

【问题讨论】:

    标签: heroku dropwizard


    【解决方案1】:

    搞定了。

    如上所述,我试图执行 dropwizard-app.jar 但是在 heroku 上创建的 jar 没有提到名称,它采用了默认的存档名称 从 build-'some autogenerated value'.jar

    开始

    所以我在我的项目中添加了一个 settings.gradle

     rootProject.name = 'dropwizard-app' 
    

    现在创建的 jar 是 dropwizard-app-1.0.jar

    因为我在 build.gradle 中将 version 属性设置为 1.0

    我用heroku run bash 检查heroku上的文件

    【讨论】:

    • +1。 Heroku 试图通过花哨的 API 和大按钮变得可爱,无需真正的果汁即可按下。他们的任何文档中都没有提到上传的工件被重命名。至少不是我用一个小时的谷歌搜索就能找到的。
    【解决方案2】:

    我写了一个基于 Maven 的部署指南,描述了 how to deploy a Dropwizard to Heroku,它可能会提供一些帮助。虽然它不包括 gradle,但它确实指出了 Heroku 环境的一些常见问题。

    例如,您的 Procfile 应如下所示:

    web java $JAVA_OPTS -Ddw.http.port=$PORT -Ddw.http.adminPort=$PORT -jar path/to/dw/module/target/example-develop-SNAPSHOT.jar server path/to/dw/module/config-heroku.yml
    

    【讨论】:

      最近更新 更多