Google App EngineのJava 11環境でSpring BootアプリケーションをGradleを使ってデプロイしたところ、ローカル上では正しくページ表示されるのに、App Engine上にデプロイすると、なぜか、500エラーになるというトラブルに遭遇しました。
Google Cloudのログを調べてみると下記のエラーログを発見しました。Spring Boot系のクラスがjarが含まれていない!
java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
さらに調べると、アップロードされたjarファイル名がxxxx-0.0.1-SNAPSHOT-plain.jar
のようになっていて、plain.jarがアップロードされていることが根本原因でした(Google App EngineのGradle Pluginのデフォルトの設定だとfat jarではなく、plain.jarが選択されるようです)。
plain.jarは、Spring Bootの2.5から作成されるようになったので、それ以前のSpring Bootのバージョンでは問題は発生しません。
[解決法1] build.gradleのjarプラグインの設定を変更
build.gradleのjarプラグインの設定でplain.jarが生成されないうように修正して、fat jarがデプロイされるようになりました。
jar {
enabled = false
}
こちらの記事に感謝。
https://zenn.dev/donchan922/articles/ea76614f72b15e
[解決法2] appengine.stage.artifactを指定
こちらは、試していませんが、appengine.stage.artifactにデプロイするターゲットのファイルを指定する方法もありかも知れません。
# build.gradleのappenineの設定でデプロイする対象ファイルを指定。
appengine {
stage {
artifact = "build/libs/xxxx-0.0.1-SNAPSHOT.jar"
}
}
コメント