GAE
GoogleAppEngine
Eclipseプラグイン

Google Plugin for Eclipse から Cloud Tools for Eclipse への移行

はじめに

Google Plugin for Eclipse が2018年01月で廃止されるということで、既存のプロジェクトを Cloud Tools for Eclipse で構築した開発環境へ移行してみた。
これまでEclipse 4.2 Juno を使ってきたが、せっかくなので最新版のEclipse 4.7 Oxygen で構築する。
これまでフレキシブル環境(Flexible Environment)でのみサポートされていたJava8が2017年07月からスタンダード環境(Standard Environment)でもサポートされるとの事だが、現時点ではベータ版ということで、今回はJava7で移行する。Java8への移行は正式サポート後に検討ということで。

やること

1.Eclipse 4.7 Oxygen のインストール
2.Google Cloud SDK のインストール
3.App Engine SDK for Java のインストール
4.Eclipse に Cloud Tools for Eclipse をインストール
5.既存プロジェクトを新環境へインポート
6.プロジェクトを App Engine Standard Project へ変換
7.Project Facets をJava7環境へ設定
8.Google Cloud SDK の既知の障害の対応 ※Ver 158.0.0 では解消していない
9.クリーンビルドを実行
10.エラー潰し
11.デプロイ

1.Eclipse 4.7 Oxygen のインストール

-事前にjdk1.7jdk1.8 の両方をインストールしておく
 環境変数のPathは、jdk1.8 で設定する
 ※Pathをjdk1.7 で設定するとEclipseが起動しない
-Eclipseダウンロード
 Eclipse IDE for Java Developers を選択

2.Google Cloud SDK のインストール

-Cloud SDK インストール
 gcloud init を実行する
 ※Google Cloud クライアントライブラリは、とりあえずインストールしない

3.App Engine SDK for Java のインストール

-Google Cloud SDK Shell を起動して
 gcloud components install app-engine-java
 を実行する ※少々時間がかかるので気長に待つ
 よく見ると進捗が判るようにちょっとずつ"="が増えてるw

4.Eclipse に Cloud Tools for Eclipse をインストール

-Eclipseを起動し、
 Help > Eclipse Marketplace...
eclipsemarketplace.png
 Find に Google Cloud と入力して検索して、[Install]ボタンを押下する

5.既存プロジェクトを新環境へインポート

-Eclipseの File > Import...

import.png

import2.png

6.プロジェクトを App Engine Standard Project へ変換

Eclipseのプロジェクトを右クリックしてConfigure > Convert to App Engine Standard Projectを選択
convert.png

7.Project Facets をJava7環境へ設定

Eclipseのプロジェクトを右クリックしてProperties > Project Facetsを選択
-App Engine Java Standard Environment > JRE7
-Dynamic Web Module > 2.5
-Java > 1.7
に設定する
projectfacets.png
※Java 1.7を選択する時に**Java Build Path > JRE System Library[JavaSE-1.7]のPathがjdk1.7.0_80になっているか確認

8.Google Cloud SDK の既知の障害の対応

参考サイト
インストール先のフォルダ名に半角スペースが含まれる事が問題らしぃ
これのせいでデプロイ時にcom.google.appengine.apiをインポートしているJSPがことごとくエラーになる
import文を削除して、クラスを全て完全修飾クラス名で書換えればエラーは消えるが、数が数だけに修正数が半端ないので、この修正はありえない・・・
と、いうことで Cloud SDK のインストールフォルダ名をから半角スペースを削除する事で対応する
space.png
-C:\Users\xxxxxxxx\AppData\Local\Google
 Cloud SDK -> CloudSDK へ変更
-EclipseのWindow > Preferences > Google Cloud Toolsを選択
SDK location:を上記フォルダ名に修正する
googlesdk.png

9.クリーンビルドを実行

EclipseのProject > clean...を実行
旧環境ではJSPのエラーチェックがされていなかったので、ここにきて色々とコーディングミスが出てきました・・・
これで普通にデプロイできてたのが不思議!?

10.エラー潰し

ここは個人差があると思うが、とりあえず私の環境で出たエラーを記載しておく

jdoconfig.xml に xsi:schemaLocation を追記

変更前:src\META-INF\jdoconfig.xml
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
変更後:src\META-INF\jdoconfig.xml
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig"
xsi:schemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd">

web.xml の に を追記

変更前:web.xml
<security-constraint>
  <web-resource-collection>
    <url-pattern>/admin/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>
変更後:web.xml
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Admin</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

POST,GETを大文字で記載しているとダメ

<form method="POST">~</form>
<form method="post">~</form>

11.デプロイ

Eclipse上部のGAEアイコンをクリックしてDeploy to App Engine Standardを選択
deploy.png
-Account:プロジェクトオーナーを選択
-Project:リストからプロジェクトを選択
-Promote the deployed version to receive traffic
 これにチェックを入れるとデプロイ後に即反映されるので要注意!
1~10までやれば、問題なくデプロイできると思うが、
-Deployが選択できない > 6.の実行忘れ
-JSPでエラー > 8.の設定忘れ
などが疑われる。。。

最後に・・・

色々なサイトを見ているとGoogle App Engine がJava8に対応していない事でJSPのデプロイが失敗するといった記載をよく見る
eclipse.ini に

-vm
C:/Program Files/Java/jdk1.7.0_80/bin/javaw.exe

を追記するとか色々書かれているが、Eclipse 4.7 Oxygen 自体がjdk1.7では起動しない・・・
結局の所、Cloud SDK のバグが原因だった訳だが、Java8対応うんぬんのフェイクにかなり苦労した・・・
あまりに苦労したのとCloud SDK のバグ情報を皆様に知って頂くために今回投稿させて頂きました。
2018年01月までにCloud Tools for Eclipse へ移行するために皆様の参考なれば幸いです。

以上