久々のGoogle App Engineではまりまくり。

Google App Engineで構築しているサイトがあるのですが、2014年に構築して以来、放置状態でした。
放置状態なのでアクセス数もほとんどないのですが、スマホ対応化&広告付与をしようと思って久々に触ってみました。

Eclipseを最新化して、Google App EngineのEclipse Pluginを導入して...と環境構築に勤しんでから、
Subversionのリポジトリからコードをチェックアウト。

動かしてみるとまともに動かない...。

はまりポイント① java.lang.NoClassDefFoundError

とりあえず動かしてみたら、いきなり例外発生。
あまり真面目に解析しなかったがSlim3内部で使っているのだろうか?
Base64DecorderExceptionが見つからないみたいなエラー。

Google App Engineをむやみやたらと更新したのが裏目に出たのと反省。
とりあえず稼働実績のあるGoogle App Engine 1.7.0にしてみることに。

はまりポイント② org.apache.jasper.JasperException

今度こそと思い、動かすと新たな例外発生。その名もJapserException。
調べたらJava7にしたら治るらしい。そもそもGAEの推奨はJava7らしい。
というわけでJava7にしたらエラーはでなくなりました。

はまりポイント③ 500 Internal Server Error

今までのエラーを解消してローカル環境では動くようになりました。
とりあえずの既存コードのデプロイを試してみると、デプロイは成功したもののHTTPステータスコード500が返ってくる。
ログを見てみるとjava.lang.UnsupportedClassVersionErrorが出ていて、Unsupported major.minor version 52.0とのこと。

JSPのバイトコードは52.0(Java8)で生成されてしまっているらしい。
Java7に変えたのに何故だろうと思っていたが、どうやらEclipseが動作しているJavaのバージョンでコンパイルされている様子。

eclipse.iniを弄ってJava7に振り替えるとEclipseが起動しない。
どうやらEclipse 4.6(Neon)はJava7で動作はできないのだろうか。

というわけで諦めてEclipse 4.3(Kepler)としました。
そうしたところ、正常に動作しましたとさ。

今回の結果から、Slim3構成 かつ JSP使っている場合は以下の組み合わせがよさそうですね。
IDE:Eclipse 4.3(Kepler)
JDK:JDK7 Update80
GAE SDK:1.7.7
Slim3:1.0.16

ほんと、非互換って恐ろしい。