Heroku 上的 Spring Boot Gradle 应用程序:无法访问 jarfile

Sim*_*mon 3 java spring heroku spring-boot

我有一个 spring boot gradle 应用程序,可以通过执行以下操作在我的 PC 上成功运行:

heroku local
Run Code Online (Sandbox Code Playgroud)

当我去的时候它也可以成功部署在heroku上:

git push heroku master
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 596 bytes | 0 bytes/s, done.
Total 9 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching set buildpack https://github.com/heroku/heroku-buildpack-gradle... done

remote: -----> Gradle app detected
remote: -----> Installing OpenJDK 1.8... done
remote: -----> Building Gradle app...
remote:        WARNING: The Gradle buildpack is currently in Beta.
remote: -----> executing ./gradlew build
remote:        :compileJavaNote: Some input files use unchecked or unsafe operations.
remote:        Note: Recompile with -Xlint:unchecked for details.
remote:
remote:        :processResources
remote:        :classes
remote:        :jar
remote:        :bootRepackage
remote:        :assemble
remote:        :compileTestJava UP-TO-DATE
remote:        :processTestResources UP-TO-DATE
remote:        :testClasses UP-TO-DATE
remote:        :test UP-TO-DATE
remote:        :check UP-TO-DATE
remote:        :build
remote:
remote:        BUILD SUCCESSFUL
remote:
remote:        Total time: 11.935 secs
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing... done, 72.3MB
remote: -----> Launching... done, v9
remote:        https://myapp.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/myapp.git
   6326429..291326d  master -> master
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在 heroku 上访问它时,它崩溃了。Heroku 日志是这样说的:

2015-12-11T17:05:46.096985+00:00 heroku[api]: Deploy 291326d by xxx@gmail.com
2015-12-11T17:05:46.097021+00:00 heroku[api]: Release v9 created by xxx@gmail.com
2015-12-11T17:05:46.378258+00:00 heroku[slug-compiler]: Slug compilation started
2015-12-11T17:05:46.378269+00:00 heroku[slug-compiler]: Slug compilation finished
2015-12-11T17:05:46.755655+00:00 heroku[web.1]: State changed from crashed to starting
2015-12-11T17:05:53.121398+00:00 heroku[web.1]: Starting process with command `java -Dserver.port=5000 -jar  build/libs/myapp.jar`
2015-12-11T17:05:54.260741+00:00 app[web.1]: Error: Unable to access jarfile build/libs/myapp.jar
2015-12-11T17:05:54.784064+00:00 heroku[web.1]: State changed from starting to crashed
2015-12-11T17:05:54.773714+00:00 heroku[web.1]: Process exited with status 1
2015-12-11T17:05:54.788248+00:00 heroku[web.1]: State changed from crashed to starting
Run Code Online (Sandbox Code Playgroud)

为什么Unable to access jarfile build/libs/myapp.jar

当我导航到本地 PC 上的该文件夹时,jar 文件就在那里。

我对如何解决这个问题已经没有想法了。

Suj*_*jan 5

您无需为此修改阶段任务。

在你的 gradle.build 文件中,确保为你构建的工件命名,如下所示。

jar {
    baseName = 'app'
    version = '0.0.1'
}
Run Code Online (Sandbox Code Playgroud)

完成此操作以及 中的以下操作后Procfile,它应该可以正常运行。

web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/app-0.0.1.jar
Run Code Online (Sandbox Code Playgroud)

我发现如果没有明确定义 name,heroku 似乎会将该工件命名为类似的名称build-{buildNumber}.jar,难怪它永远找不到app.jar.

此外,如果尚未设置,则需要设置构建包。

heroku config:set GRADLE_TASK="build"
Run Code Online (Sandbox Code Playgroud)