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" ...
IT関連の技術やプログラミングを中心に記事を書いています。ハードウェアも好きなので、日々のちょっとしたお役立ち情報も投稿しています。