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.7](http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html) と [jdk1.8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) の両方をインストールしておく
　環境変数のPathは、jdk1.8 で設定する
　※Pathをjdk1.7 で設定するとEclipseが起動しない
-[Eclipseダウンロード](https://www.eclipse.org/downloads/eclipse-packages/)
　Eclipse IDE for Java Developers を選択
## 2.Google Cloud SDK のインストール
-[Cloud SDK インストール](https://cloud.google.com/sdk/docs/?hl=ja)
　gcloud init を実行する
　※Google Cloud クライアントライブラリは、とりあえずインストールしない
## 3.App Engine SDK for Java のインストール
-Google Cloud SDK Shell を起動して
　`gcloud components install app-engine-java`
　を実行する　※少々時間がかかるので気長に待つ
　よく見ると進捗が判るようにちょっとずつ"="が増えてるｗ
## 4.Eclipse に Cloud Tools for Eclipse をインストール
-Eclipseを起動し、
　**Help > Eclipse Marketplace...**
![eclipsemarketplace.png](https://qiita-image-store.s3.amazonaws.com/0/197306/fb4e7af0-0c78-a20b-d604-2a3de698c3d0.png)
　Find に Google Cloud と入力して検索して、[Install]ボタンを押下する
## 5.既存プロジェクトを新環境へインポート
-Eclipseの **File > Import...**

![import.png](https://qiita-image-store.s3.amazonaws.com/0/197306/3ab782de-0a18-aac5-1e40-2c6fae47d738.png)
---
![import2.png](https://qiita-image-store.s3.amazonaws.com/0/197306/67ee2cfb-97b3-4219-e093-63ad9ba1591a.png)
## 6.プロジェクトを App Engine Standard Project へ変換
Eclipseのプロジェクトを右クリックして**Configure > Convert to App Engine Standard Project**を選択
![convert.png](https://qiita-image-store.s3.amazonaws.com/0/197306/26ca844e-e7de-daac-3440-c670f8714742.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](https://qiita-image-store.s3.amazonaws.com/0/197306/02c36747-5408-7078-4a10-1abda1a1b1ad.png)
※Java 1.7を選択する時に**Java Build Path > JRE System Library[JavaSE-1.7]のPathがjdk1.7.0_80になっているか確認
## 8.Google Cloud SDK の既知の障害の対応
[参考サイト](https://github.com/GoogleCloudPlatform/google-cloud-eclipse/issues/2202)
インストール先のフォルダ名に半角スペースが含まれる事が問題らしぃ
これのせいでデプロイ時に**com.google.appengine.api**をインポートしているJSPがことごとくエラーになる
import文を削除して、クラスを全て完全修飾クラス名で書換えればエラーは消えるが、数が数だけに修正数が半端ないので、この修正はありえない・・・
と、いうことで Cloud SDK のインストールフォルダ名をから半角スペースを削除する事で対応する
![space.png](https://qiita-image-store.s3.amazonaws.com/0/197306/b71cf244-8f60-f511-9e4e-4db04cd9ef43.png)
-C:\Users\xxxxxxxx\AppData\Local\Google
　**Cloud SDK -> CloudSDK** へ変更
-Eclipseの**Window > Preferences > Google Cloud Tools**を選択
**SDK location:**を上記フォルダ名に修正する
![googlesdk.png](https://qiita-image-store.s3.amazonaws.com/0/197306/57fc59bb-62c2-691d-1baa-32767b50a024.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 の <security-constraint> に <web-resource-name>を追記

```変更前：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
<form method="POST">～</form>
```

```変更後：form
<form method="post">～</form>
```
## 11.デプロイ
Eclipse上部のGAEアイコンをクリックして**Deploy to App Engine Standard**を選択
![deploy.png](https://qiita-image-store.s3.amazonaws.com/0/197306/841ae14d-f13d-8063-4636-7cb676c8a93e.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 へ移行するために皆様の参考なれば幸いです。

## 以上