読者です 読者をやめる 読者になる 読者になる

slim3-mavenを試してみたよ

@shin1ogawaさんがmavenでslim3を使えるようにしてくれたようなので、ちょっとためしてみました。

http://twitter.com/shin1ogawa/status/11996294086

@bufferings maven2をインスコして、 http://goo.gl/oiv1 をチェックアウトして、そのフォルダで mvn eclipse:eclipse するのが一番近道だと思います。んで mvn test したり、eclipseからテストを実行したり。

ということで、試してみることにします。

svn checkout http://appengine-hackathon-ja.googlecode.com/svn/trunk/ahack3/slim3-maven
cd slim3-maven/
mvn eclipse:eclipse

とすると、なんやかんやがさくっと動きます(mavenはインストールされている前提)。

eclipsemavenを有効化するのには、m2eclipseをつかいました。
http://m2eclipse.sonatype.org/installing-m2eclipse.html

m2eclipseが入っていないか、環境変数M2_REPOが設定されていないとエラーが出たりします。m2eclipseを入れるのが手っ取り早いと思います。

mvn test

とすると、これも単体テストが簡単に動いてくれます。

eclipseから単体テストを動かすと、、、あれ、なんか失敗しちゃいました。

java.lang.NoClassDefFoundError: com/google/appengine/api/labs/taskqueue/TaskQueuePb$TaskQueueBulkAddRequest
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.privateGetPublicMethods(Class.java:2547)
at java.lang.Class.getMethods(Class.java:1410)
at com.google.appengine.tools.development.ApiProxyLocalImpl.getDispatchMethod(ApiProxyLocalImpl.java:256)
at com.google.appengine.tools.development.ApiProxyLocalImpl.access$300(ApiProxyLocalImpl.java:44)
at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:291)
at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:264)
at java.util.concurrent.Executors$PrivilegedCallable$1.run(Executors.java:463)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.concurrent.Executors$PrivilegedCallable.call(Executors.java:460)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.ClassNotFoundException: com.google.appengine.api.labs.taskqueue.TaskQueuePb$TaskQueueBulkAddRequest
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
... 16 more

と思ったら、appengine eclipse pluginが1.3.1でした。TaskQueueBulkAddRequestは1.3.1にないもんね。

ということで、eclipse pluginが参照するappengineのjarを1.3.2に合わせます。

ちゃんと動きました。よかったよかった。


で、とりあえずはeclipseからdevappserverを起動して所定のurlにアクセスすると、hello worldとクエリのサンプルが動作します。

アクセスするたびにプットしているコードが生成されているので、何回かアクセスするとこんな感じでデータがたまっていきます。


とまあこんな感じですごく簡単にmavenとの統合ができ、またひとつappengineがつかいやすくなりました。ビルドやテストの環境設定が楽になるところは非常にいいところだと思います。さすがshin1さんです!


いくつか気になったところをメモ。
・controller/modelの追加って、antでやってたような気がするのですが、まだサポートされてない?
・productionで動かしたらIndexControlerの結果表示が改行されないっぽい。こんなんだっけ?
・appstatsの設定ってweb.xmlっていらないんでしたっけ?そういえばせっかく純正ができたのに触ってない。。


個人的にはこれをさらにscalaも使えるようにして・・・とかよさげと思いました。もうちょっとscala自体を勉強してからやりたいと思います(scalaプログラミング入門がもうちょっとで読み終わる・・・!)。