2009年5月16日土曜日

GAE/J用のarchetypeプラグインを作成した

やっぱ依存関係とかはmavenを使わないと面倒だ。依存ライブラリのソースの添付とかも簡単にできるし。そんなワケでなんとかmavenとeclipseを共存させられないか、と四苦八苦していたのだがよぅやくなんとかなったっぽい。といぅわけでarchetypeプラグインを作ってみた。

使い方

まずはmaven的にプロジェクトを作成する
artifactを作成するフォルダに移動して以下のコマンドを実行する。
$ mvn archetype:create -DarchetypeGroupId=com.shin1ogawa -DarchetypeArtifactId=gae-jdo-quickstart -DarchetypeVersion=1.0-SNAPSHOT -DremoteRepositories=http://gae-j-samples.sourceforge.jp/maven/repository -DgroupId=com.yourdomain -DartifactId=yourArtifactId
強調斜体で表記した部分は適宜変更してください。必要であれば作成するartifactのversionやらpackageを追加で指定すればいいと思う。
テストケースだけ実行してみる?
作成したartifactのフォルダに移動して以下のコマンドを実行する。
$ mvn clean test
mavenからのテストケースも実行できるはず。
eclipse用に構成する
作成したartifactのフォルダに移動して以下のコマンドを実行する。
$ mvn eclipse:eclipse dependency:copy-dependencies
依存モジュールをコピーしているのは、eclipseからGAE SDKでwebアプリとして起動する時に必要なjarを/war/WEB-INF/libにコピーする必要があるからです。
eclipseに取り込もう
eclipseを起動して、[Import][Existing Projects...]で作成したartifactのフォルダを選択するだけ。
注意!eclipseの設定で、"M2_REPO"がローカルリポジトリをさしている必要がありまっす。これはeclipseの設定画面を開いて、[Java][Build path][Classpath variables]で追加できます。[Name]に"M2_REPO"、[Path]に例えば"/Users/shin1/.m2/repository"みたいなかんじ。普段からmavenとeclipseを使っている人なら設定済みじゃないかと。
Webアプリを実行する
これはeclipseからしか実行できません。プロジェクト直下の"launches/gaej.web.launch"を右クリックして、"Run As"から実行してください。
eclipseのコンソールに”The server is running at http://localhost:8080/”と表示されたら正常に起動できてます。ブラウザからhttp://localhost:8080/にリクエストしてみると、簡単なゲストブックが動作するはず。
eclipseからテストケースを実行してみる
プロジェクト直下の"launches/gaej.unittest.launch"を右クリックして、"Run As"から実行してください。

作成される雛形について

  • プラグイン名を見てもわかるとおり、jdoを使う雛形が作成されます。
  • Viewには素のjspを使ってます。
  • memcacheを少し使ってます。
  • mavenからunit testを実行できるので、CIするのも簡単です。
  • eclipseからunit testを実行できるので、リズムよく開発できます。

何か問題があれば、TwitterなりFriendFeedなりで連絡をくださいー。

追記

以下が前提です!

  • mavenがインストールされている。
  • EclipseにGoogle App Engine SDK Pluginがインストールされていて、1.2.1にアップデート済みである。

mavenはいいとして、eclipse pluginについて初期の1.2.0を入れてしまっている人は以下の手順でUpdateする事ができます。

  1. [Help][Software Updates]メニューを開く
  2. [Google Update Site for Eclipse 3.4]にチェックを入れる。
  3. [Install]ボタンを押す。
  4. 終わるまで待つ。再起動を促されたら素直に再起動する。
  5. Eclipseの設定画面を開いて[Google][App Engine]を開くと、"1.2.0"と"1.2.1"があるので、"1.2.1"をチェックする(デフォルトにする)。

このあたりのGoogleAppEnginePluginのバージョンやらPluginを導入するタイミングによっては、以下のようなExceptionが出ます。

java.lang.NullPointerException
 at com.yourdomain.logic.AbstractLogic.newQuery(AbstractLogic.java:29)
...
Caused by: org.datanucleus.exceptions.NucleusException: Plugin (Bundle) "org.datanucleus.store.appengine" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/Users/shin1/Documents/projects.gae/yourArtifactId/war/WEB-INF/lib/datanucleus-appengine-1.0.1.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/Users/shin1/Documents/projects.gae/yourArtifactId/war/WEB-INF/lib/datanucleus-appengine-1.0.1.final.jar."

この場合はプロジェクトを作り直すか、war/WEB-INF/lib/datanucleus-appengine-1.0.1.final.jarを消してやってください(プロジェクトを作り直した方が無難)。

コメントを投稿