お題
この間、デプロイに失敗した事例の記事を書いた。
今回、MavenでCloud Endpoints Frameworksのスケルトンプロジェクトを作ってGAEへのデプロイを試みたところ、再びデプロイ失敗したので、その原因と解決法を書く。
GAE試行Index
- GAE/Java8試行(その0:「App Engineについて」)
- GAE/Java8試行(その1:「Java8でWebアプリ作ってデプロイ」)
- GAE/Java8試行(その2:「Javaアプリ解説」)
- GAE/Java8試行(その3:「Javaアプリテストコード解説」)
- GAE/Java8試行(その4:「Datastoreへのアクセスロジック」)
- GAE/Java8試行(その5:「ローカル開発用コンソール」)
- GAE/Java8試行(その6:「デプロイ失敗」)
- GAE/Java8試行(その7:「ウォームアップリクエスト(ServletContextListener使用版)」)
- GAE/Java8試行(その8:「Cloud Endpoints Frameworks」)
開発環境
# OS
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
# Java
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
# IDE
みんな大好きIntelliJ IDEA
本題
GAEデプロイ失敗
$ mvn appengine:deploy
[INFO] Scanning for projects...
〜〜〜〜
[INFO] GCLOUD:
[INFO] GCLOUD: Beginning interaction for module default...
[INFO] GCLOUD: 0% Warning: Google App Engine Java 7 runtime is deprecated.
[INFO] GCLOUD: 0% Warning: See https://cloud.google.com/appengine/docs/deprecations/java7
[INFO] GCLOUD: Unable to stage app: Class file is Java 8 but max supported is Java 7: /work/src/java/github.com/sky0621/java-webapi-for-gae-study/com.example.sky0621.fs/target/com.example.sky0621.fs-1.0-SNAPSHOT/WEB-INF/classes/com/example/sky0621/fs/BookSaver.class
[INFO] GCLOUD: Please see the logs [/tmp/appcfg5667381128099465326.log] for further information.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.862 s
[INFO] Finished at: 2018-11-06T09:17:14+09:00
[INFO] Final Memory: 22M/443M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.cloud.tools:appengine-maven-plugin:1.3.1:deploy (default-cli) on project com.example.sky0621.fs: Execution default-cli of goal com.google.cloud.tools:appengine-maven-plugin:1.3.1:deploy failed: Non zero exit: 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
原因
とりあえず「ERROR
」の行では原因がわからなかったので「mvn -X appengine:deploy
」でスタックトレースを確認しようとしたのだけど、ふと、「INFO
」の行の「Unable to stage app: Class file is Java 8 but max supported is Java 7
」というのが目に止まった。
「Java8で書かれたソースをデプロイしようとしているが、サポートしているのはJava7まで」?
いや、前回、「-Djava8=true
」付きでMavenプロジェクトビルドしたんだけど・・・。
一応、「appengine-web.xml
」の中を確認してみる。
$ pwd
/work/src/java/github.com/sky0621/java-webapi-for-gae-study/com.example.sky0621.fs
$
$ tree
| 〜〜〜
├── src
├── main
└── webapp
└── WEB-INF
├── appengine-web.xml
$ cat src/main/webapp/WEB-INF/appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
あ、「<runtime>java8</runtime>
」が入ってない・・・。
なんでだろう・・・。
たぶん、これが原因だな。
解決
修正。
$ cat src/main/webapp/WEB-INF/appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
そして、デプロイ。
$ mvn appengine:deploy
[INFO] Scanning for projects...
[INFO]
〜〜〜〜
[INFO] GCLOUD: $ gcloud app browse
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.725 s
[INFO] Finished at: 2018-11-06T09:32:09+09:00
[INFO] Final Memory: 20M/391M
[INFO] ------------------------------------------------------------------------
成功。
う〜ん、なんでJava8ランタイムが付かなかったんだろう・・・。