Google Plugins for EclipseからCloud Tools for Eclipseの移行
長らくEclipse Luna (4.4) + Google Plugin for Eclipseで開発を続けてきたのですが、Google App Engineの開発ページを覗いたら下記のようなメッセージが出ていてびっくり。The Google Plugin for Eclipse is deprecated and will be removed in January 2018. Migrate to Cloud Tools for Eclipse and/or the GWT Eclipse Plugin as soon as possible to avoid disruption.
Google Plugin for Eclipseは、2018年の1月でサポート打ち切りで、Cloud Tools for Eclipseに移行しなさいとのこと。
せっかくなので最新のeclipseを使って下記の設定で開発環境を再構築することにしました。
移行方法
- 最新のJDK 8 をhttp://www.oracle.com/technetwork/java/javase/downloads/index.htmlからダウンロードしてインストール。JDKをダウンロード Java 9 も試そうかとも思ったのですが、2017年9月現在Google App Engine側はまだJava 8までしかサポートしていないので、
- Eclipseを http://www.eclipse.org/downloads/eclipse-packages/ からダウンロード。私は、Eclipse IDE for Java Developersをダウンロードしました。
- EclipseでGoogle App Engineの開発を行うための設定をhttps://cloud.google.com/eclipse/docs/quickstart を読んで実施。
- Google Cloud SDKをダウンロード
- Google Cloud Tools for Eclipse をEclipse Marketplace.を通してインストール
- 古いプロジェクトで無理やりApp Engine SDK内のjarを参照して開発していたので、App Engine SDK もhttps://cloud.google.com/appengine/docs/standard/java/downloadからダウンロード 。(このステップは不要かも)
ここでは、旧Google Plugins for EclipseのプロジェクトをCloud Tools for Eclipseに移行したときの作業を簡単に書こうと思います。結論からいうと移行はかなり苦労しました。
移行手順
- まずはworkspaceを新規に作成してEclipseのメニュー「Import > Existing Project into Workspace」を選択して、旧Google Plugins for Eclipseのプロジェクト
- appengine-web.xmlでjavaのruntime versionをjava 8に指定。
<runtime>java8</runtime>
- Eclipseのプロジェクトを右クリックしてメニューの「Configure > Convert to App Engine Standard Project」を選択して、Google App Engineのプロジェクトに変更。
- 実行に必要なJarファイルへのBuild Pathをマニュアルで設定。例えばJUnitでData Storeへのテストで参照していたcom.google.appengine.tools.development.testing.*以下のクラスが含まれるjarファイルappengine-testing.jarをBuild Pathに追加しました。
- xmlファイルのスキーマチェックので色々エラーが出たので細かく修正。
- Eclipse上でコンパイルエラーが出なくなる。万歳!
移行で苦労したところ
コンパイルまで通ったので、早速Google App EngineのWebアプリケーションとして起動して、移行完了かと思いましたが、Google Data Storeの部分で思わぬ落とし穴にはまってしまいました。
pluginによるORMのサポート打ち切り!
pluginによるORMのサポート打ち切り!
Google Plugins for EclipseではDataNucleasがプラグインの中に含まれていて、Eclipse上で下記のような設定をすれば、DataNucleus Enhancerが起動してクラスをEnahnceしてくれました。
が、Cloud Tools for Eclipseでは、その機能自体がなくなってしまいました。Data Storeへのアクセスが発生する部分で下記のExceptionが出てしまいました。
DataNucleusを使用したい場合は、自分でMavenやpluginを使ってDataNucleusの設定をしなければいけないようです。しかもGoogleは、赤字でこんなことまでアナウンス。
GoogleのDataStoreをそんなに使っているアプリケーションではなかったので、今回は移行スピード最優先でDataStoreへのアクセス部分を切り離して、アプリケーション起動するところまでもっていきました。後日、DataNucleusを使って動かすところまで持っていこうと思います。
ここまでやってようやくGoogle Plugins for EclipseからCloud Tools for Eclipseへ移行できました。DataStoreまわりはこれからなので、完全な移行はもっと時間がかかりそうです。が、Cloud Tools for Eclipseでは、その機能自体がなくなってしまいました。Data Storeへのアクセスが発生する部分で下記のExceptionが出てしまいました。
Warning: We think most developers will have a better experience using the low-level Datastore API, or one of the open-source APIs developed specifically for Datastore, such as Objectify. JPA was designed for use with traditional relational databases, and so has no way to explicitly represent some of the aspects of Datastore that make it different from relational databases, such as entity groups and ancestor queries. This can lead to subtle issues that are difficult to understand and fix.いい加減に意訳すると「最近のディベロッパーは下層レベルDatastoreのAPIや、Datastore専用に作られたObjectifyといったAPIを使っているから、伝統的なRDB用のJDOやJPAではGoogleのDatastoreは使いこなせないよ!」とのこと。
GoogleのDataStoreをそんなに使っているアプリケーションではなかったので、今回は移行スピード最優先でDataStoreへのアクセス部分を切り離して、アプリケーション起動するところまでもっていきました。後日、DataNucleusを使って動かすところまで持っていこうと思います。
コメント
I have same problem,upgrade gae java7 to java8 ,when deploy return "No such servlet: jsp".
jsp
空のダミーサーブレットクラス
1
I try this,in gae is work perfect.
(but not work in localhost.i need mark this code before use my localhost...)
thank you a lot!
My application works perfectly on both local and actual app engine environment without the empty dummy servlet class.