SpringframeworkとGradleを使ってローカルで動作確認したwebアプリを
herokuでデプロイしようとしています。
コマンドプロンプトで
$ git add .
$ git commit -m "first commit."
$ heroku login
$ heroku create
$ git push heroku master
を実行すると以下のようなエラーが表示されます。
(Gradle Wrapper app のコンパイルに失敗し、pushが拒否されました)
原因はbuild.gradleファイルにあるかと思い、
色々と調べながら修正していますがなかなか解決できません。
またGitやコマンドプロンプトの操作もあやしく、
javaやgradleのバージョンの確認もネットで調べて行いましたが
あまり自信がありません。。
知識ゼロから参考書やインターネットで調べながらjavaを独学し
練習用に作成したアプリケーションです。
公開する作業まで完了させてみたく、
比較的簡単にデプロイできると言われていたherokuでチャレンジしています。
かなり理解が浅く、ネットで調べたコードを切り貼りしたような状態で
専門の方にはお見苦しいものかと思いますが、どうかアドバイス頂けますと幸いです。
teratailにて初めて質問させていただきます。
不足している情報がありましたら追加しますので
ご指摘の程よろしくお願いいたします。
発生している問題・エラーメッセージ(コマンドプロンプト上)
C:\sts\workspace-spring-tool-suite-4-4.9.0.RELEASE\appName>git push heroku master
Enumerating objects: 485, done.
Counting objects: 100% (485/485), done.
Delta compression using up to 8 threads
Compressing objects: 100% (422/422), done.
Writing objects: 100% (485/485), 114.43 MiB | 554.00 KiB/s, done.
Total 485 (delta 192), reused 0 (delta 0), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Using buildpack: https://github.com/marcoVermeulen/heroku-buildpack-gradlew.git
remote: -----> Gradle Wrapper app detected
remote:
remote: gzip: stdin: not in gzip format
remote: tar: Child returned status 1
remote: tar: Error is not recoverable: exiting now
remote: ! Push rejected, failed to compile Gradle Wrapper app.
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to frozen-reef-95901.
remote:
To https://git.heroku.com/frozen-reef-95901.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/frozen-reef-95901.git'
該当のソースコード
build.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE' } } plugins { id 'org.springframework.boot' version '2.3.5.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' id 'eclipse' id 'idea' } jar { baseName = 'spring-boot-sample' version = '0.1.0' } repositories { mavenCentral() } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = 11 //apply plugin: 'war' sourceCompatibility = '1.8' targetCompatibility = '1.8' compileJava.options.encoding = "UTF-8" configurations { provided } sourceSets { main { compileClasspath += configurations.provided } } dependencies { // Spring implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-aop' developmentOnly 'org.springframework.boot:spring-boot-devtools' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // H2 Database runtimeOnly 'com.h2database:h2' // for lombok provided 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok:1.18.12' //テスト関係 testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2' // JUnit 5を使うための依存性 testCompile("org.junit.jupiter:junit-jupiter-api") testRuntime("org.junit.jupiter:junit-jupiter-engine") // Mockitoのライブラリが含まれている testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation('org.mockito:mockito-core') testImplementation('org.mockito:mockito-junit-jupiter') } test { useJUnitPlatform() } task stage(dependsOn: ['build', 'clean']) build.mustRunAfter clean wrapper { gradleVersion = '6.7' //distributionUrl = distributionUrl.replace("bin", "all") }
Procfile
web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/PetNote-0.0.1-SNAPSHOT.jar
system.properties
java.runtime.version=15
.gitignore(プロジェクトフォルダ直下)
HELP.md .gradle build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/** !**/src/test/** /bin ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr out/ ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ ### VS Code ### .vscode/ .DS_Store
試したこと
https://qiita.com/dumbbell/items/c7e5162557a1a299b44b
https://qiita.com/gosshys/items/fa02b390b60ee3001dae
⇒主にこれらの記事を参考に作業を進めました。
- エラーメッセージにありますGradle Wrapperについて調べまして、
以下の必要とされるファイルがあることは確認しました。
プロジェクトフォルダ直下 > gradle > wrapper > gradle-wraper.jar
プロジェクトフォルダ直下 > gradle > wrapper > gradle-wraper.properties
- heroku公式サイトにあります「Heroku スターターガイド (Gradle)」の手順に
沿ったサンプルアプリは問題なくデプロイできました。
https://devcenter.heroku.com/ja/articles/getting-started-with-gradle-on-heroku
バージョン
-
Windows 10
-
Spring Tool Suite 4 Version: 4.9.0.RELEASE
-
java.runtime.version=15
※STSのWindow > Preference > Java > Installed JREs のファイルパスにある以下のフォルダ名から、
「バージョンは15」と読み取りました。
org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507
- gradleVersion = '6.7'
※コマンドプロンプトで「gradlew -v」と実行した際に出てきたバージョンです。
【追記】追加で試したこと
頂いたアドバイスをもとに、
① ターミナルからコマンドで heroku 側の設定を修正
heroku config:unset BUILDPACK_URL=https://github.com/marcoVermeulen/heroku-buildpack-gradlew.git heroku buildpacks:add https://github.com/marcoVermeulen/heroku-buildpack-gradlew.git heroku buildpacks:remove heroku/gradle
② herokuへのデプロイを実行すると、以下のようなエラーメッセージが表示されました
C:\sts\workspace-spring-tool-suite-4-4.9.0.RELEASE\PetNote>git push heroku master Enumerating objects: 493, done. //~~ 省略 ~~// remote: remote: * What went wrong: remote: Could not determine the dependencies of task ':stage'. remote: > Task with path 'installApp' not found in root project 'PetNote'. remote: remote: * Try: remote: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. remote: remote: * Get more help at https://help.gradle.org remote: remote: Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. remote: Use '--warning-mode all' to show the individual deprecation warnings. remote: See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings remote: remote: BUILD FAILED in 20s remote: remote: ! ERROR: Failed to run Gradle! remote: We're sorry this build is failing. If you can't find the issue in application remote: code, please submit a ticket so we can help: https://help.heroku.com remote: You can also try reverting to the previous version of the buildpack by running: remote: $ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-gradle#previous-version remote: remote: Thanks, remote: Heroku remote: //~~ 省略 ~~//
③ 「Could not determine the dependencies of task ':stage'.」のエラーメッセージについて調べ、以下の記事を参考に、ターミナルからHerokuへの設定を追加しました。
https://stackoverflow.com/questions/38661195/grails-3-and-heroku-stage-task-not-found
heroku config:set GRADLE_TASK="build"
④ 再度Herokuへのデプロイを実行すると、以下のエラーが発生
heroku config:set GRADLE_TASK="build" C:\sts\workspace-spring-tool-suite-4-4.9.0.RELEASE\PetNote>git push heroku master //~~ 省略 ~~// remote: remote: Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. remote: Use '--warning-mode all' to show the individual deprecation warnings. remote: See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings remote: remote: BUILD SUCCESSFUL in 1m 31s remote: 6 actionable tasks: 6 executed remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: ! Compiled slug size: 817.2M is too large (max is 500M). remote: ! See: http://devcenter.heroku.com/articles/slug-size remote: remote: ! Push failed remote: ! //~~ 省略 ~~//
⑤ 「Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.」エラーメッセージについて調べたところ、gradleで詳細のエラーメッセージを確認する必要があるとのことだったので、以下のコマンドで詳細のエラー内容を確認しました。
参考記事 : https://blog.dameninngenn.com/entry/2018/06/05/173914
gradlew build -Dorg.gradle.warning.mode=all
そのエラー内容と以下の記事を参考に、Gradle 7.0で使えない、build.gradle の中の非推奨な表記を修正しました。
参考記事 : https://ksby.hatenablog.com/entry/2019/12/31/085808
修正前 → 修正後
baseName → archiveBaseName
version → archiveVersion
testCompile → testImplementation
testRuntime → testRuntimeOnly
⑥ デプロイすると、④番と同じエラーが発生してしまいました。
回答2件
あなたの回答
tips
プレビュー