Herokuに初めてSpring Bootアプリをデプロイしたときに出たエラーメッセージと、どうしたら解決したかをまとめておきます。一般論については公式サイトや多くの優れた記事が既にあるので、この記事では私がハマったときに表示されたエラーメッセージ等と、それをどう解決したかを一般化せずそのまま書いていきます。同じ状況にある人の参考になれば幸いです。
#筆者の環境
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
javac 11.0.2
Apache Maven 3.8.2
#Exception in thread "main" java.lang.UnsupportedClassVersionError: xxx has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
##解決方法:system.properties
にjava.runtime.version=11
を記入する
コンパイルした環境と実行環境のバージョンが合っていないときに出るエラーのようです。
公式サイトによると
Heroku は現在、デフォルトで OpenJDK 8 を使用してアプリケーションを実行しています。
とのこと。自分の環境は上記の通りバージョン11なので、これによりバージョンが合わない旨のエラーが出ているようです。公式サイトの記述に従い、自分の環境に合わせて、system.properties
に
java.runtime.version=11
を記入することで解決しました。
#Error: Unable to access jarfile target/xxx-0.0.1-SNAPSHOT.jar
##解決方法:git add -f
オプションでtarget/xxx-0.0.1-SNAPSHOT.jar
をコミット対象に含める
下記の記事が大変参考になりました。
https://qiita.com/hiroki1994/items/325fdf7e5943a563867f
Procfile
内で指定されているjarファイルが、.gitignore
ファイル上でコミット対象に含まないようになっていたらしく、これにより、デプロイしてもjarファイルにアクセスできないというエラーになるようです。
git add -f target/xxx-0.0.1-SNAPSHOT.jar
により、実行したいjarファイルを強制的にコミット対象に含めることで解決しました。
#Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch
##解決方法:Procfile
に--server.port=$PORT
を記入する
以下のページが参考になりました。
https://devcenter.heroku.com/ja/articles/setting-the-http-port-for-java-applications#spring-boot
https://su-kun1899.hatenablog.com/entry/2017/07/23/230000
herokuでは起動ポートが動的に変わるようなので、Spring Boot側のポート番号もherokuの環境変数で書き換える必要があるようです。
Procfile
に--server.port=$PORT
を追記して
web: java -jar target/xxx-0.0.1-SNAPSHOT.jar --server.port=$PORT
とすることで解決しました。