GAE
GoogleAppEngine
Eclipseプラグイン

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

More than 1 year has passed since last update.

はじめに

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 へ移行するために皆様の参考なれば幸いです。

以上