2009-07-27追記
SDKのバージョンに合わせてバージョンが変わってますので更新のエントリも参照する事!
今までmaven archetype plugin
をいくつか作って来たけど、どれも「Eclipse
が前提」となっていて、せっかくarchetype:generate
でプロジェクトが作れるし、単体テストもできるのに結局Google Plugin for Eclipse
かappengine-java-sdk
も必要なんだよな〜、mavenを使った開発っぽくないよな〜、というカンジがあった。
mavenを使うんだから、sdkなんていちいち落としてくるなんておかしいよ、プラグインが勝手に解決しろや〜、て思うもんね。そこで、以下のようなMavenプラグインを作った。
com.google.appengine.tools.KickStart
を使ってcom.google.appengine.tools.development.DevAppServerMain
を起動する。- 試験のためのプラットフォームとしてSDK本体が必要になるが、公式のダウンロードサイトからダウンロードしてくる事が可能。ダウンロードしてきた場合は例えば
target/sdk
などに展開し、そこをSDKのルートとして使用する。
つまり、jettyプラグインとかcargoプラグインみたいにselenium
等でintegration-test
を自動で行ったり、さくっとアプリを起動して動作確認するためのモジュールです。
使い方
pluginRepository
としてhttp://gae-j-samples.sourceforge.jp/maven/repository
を追加し、com.shin1ogawa:gae-maven2-plugin:1.2.1-SNAPSHOT:start
(つまり、groupId=com.shin1ogawa, artifactId=gae-maven2-plugin, version=1.2.1-SNAPSHOT, goal=start)を実行してください。stop
ゴールはパラメータは無しで、start
ゴールのパラメータは以下の通り。
- address(localhost),disableUpdateCheck(true),port(8080),server
- これらは
DevAppServerMain
にそのまま渡すパラメタです。それぞれカッコ内の値がデフォルトの値です。server、って何に使うんだっけ…? - javaHome
- javaを起動するためのホームディレクトリです。省略した場合は
System.getProperty("java.home")
の値を使用します。 - warDirectory
- SDKが使用するアプリケーションのディレクトリです。デフォルトの値は
war
が設定されています。この直下にWEB-INF
が配置されている必要があります。 - sdkRootDirectory
- appengine-java-sdkがインストールされたディレクトリを指定しますが、
sdkUnZipDirectory
が指定されているとそっちを優先します。 - sdkZipFile
- SDKのZipファイルの場所。デフォルトの値は
http://googleappengine.googlecode.com/files/appengine-java-sdk-1.2.1.zip
が設定されています。 - sdkUnZipDirectory
- SDKのZipファイルを展開するディレクトリ。
- sdkSaveAs
- もし
sdkZipFile
パラメータがhttpだったりしてローカルじゃない場合に、保存するファイル名。デフォルトの値はappengine-java-sdk-1.2.1.zip
が設定されています。sdkUnZipDirectory
で指定したディレクトリ配下に作成されます。もし既に存在していた場合は、リモートからダウンロードしません。 - wait
DevAppServerMain
を起動した状態で、そのプロセスが終了するのを待ちます。mavenでintegration-test
を実行する際はpre-integration-test
フェーズでfalse
を指定してstart
ゴールを実行し、post-integration-test
フェーズでstop
ゴールを実行して停止する必要があります。ちなみに、false
で起動してしまうと、プロセスがふたつ(KickStartと、そこから起動されたDevAppServerMain)起動されて、maven実行後にもこのふたつは止まらずに残ってしまいます。この場合は手動でkillする必要があります。
とりあえず細かい事は気にせず、以下の例を見るのが手っ取り早いです。一度でも使用するとローカルリポジトリに入ってくるので、$ mvn help:describe -Dplugin=com.shin1ogawa:gae-maven2-plugin:1.2.1-SNAPSHOT -Ddetail
すると説明が表示されるはずです。
例
例えば、以下のようにpom.xml
でintegration-test
用のprofile
を定義して、$ mvn -P integration-test install
のようなカンジでprofile
を指定しつつintegration-test
フェーズが実行されるようなゴールを実行する。すると以下のように動作する。
- 通常の
surefire-test
はskipされる。 - で、
integration-test
フェーズの直前にgae-maven2-plugin:start
が実行される。- 公式サイトからSDKがダウンロードされる
- SDKがtarget/sdkに展開される
- そのSDKを利用してKickStart経由でDevAppServerMainを起動する
integration-test
フェーズでは**/servlet/*Test.java
にマッチするテストケースが実行される。integration-test
が終了すると、gae-maven2-plugin:stop
が実行され、DevAppServerMainも終了する。
integration-test
を指定すると、post-integration-test
フェーズが実行されない。この挙動は初めて知った!!モチロン、stop
ゴールも実行されない為、KickStart
,DevAppServerMain
のふたつのプロセスが残ってしまう。また、このプラグインを動作確認する程度だけれども、WebDriver
を使ったintegration-test
を行うサンプルを以下のプロジェクトに追加しています。
- http://sourceforge.jp/projects/gae-j-samples/svn/view/gae-jdo-simple-sample/?root=gae-j-samples
0 件のコメント:
コメントを投稿