Groovy-Eclipse compilerプラグインで、Maven上でGroovy!
妹の家に泊まってたら、妹が牡蠣にあたって看病することになったikikkoです。こんばんは。
EclipseでのGroovyエディタ、Groovy-Eclipseのサイトを見ていたらGroovy - Groovy-Eclipse compiler plugin for Mavenを見つけたので、ちょっと試してみました。
なお「Eclipse」とありますが、一部を除いてEclipseに特化しているわけではありません。
背景
自分の主フィールドはJava(+Maven+Eclipse)なんですが、最近はJavaが面倒なところをGroovyで補完できたらなーと考えてます。で、その一環として、テストコードをGroovyで書けないかなと調べてたところでした。プロダクトコード(src/main/~)にGroovyを突っ込むのはちょっと時期尚早な香りがするので、まずはテストコード(src/test/~)などに採用して感触を掴みたいなと。
一部ではこんなことも言われてますが、キニシナイ。。。
MavenでGroovyファイルを実行するには、何通りかやり方があるみたいですね。例えば、
- maven-antrun-pluginでGroovyコマンドを呼び出す
- http://docs.codehaus.org/display/GROOVY/Compiling+With+Maven2
- ちょっとナイーブ過ぎ…。一部のプロジェクトでスポット的にやるのならともかく、全プロジェクトで共通に使用しそうな設定はさすがにmaven-antrun-pluginはやりたくない
- GMaven
- http://docs.codehaus.org/display/GMAVEN/Home
- 経験者が語るには、ハマりどころが多い?ちょっと設定して試しただけなので、まだよくわからない*1。
でちょっと調べていたら、冒頭のようにGroovy-Eclipseのサイトで↓のようなのを見つけました。「EclipseのGroovyエディタ内で使われているGroovyコンパイラを、Mavenから呼べるようにしたもの」らしいですね。
特徴
Groovy-Eclipse compilerプラグインで、いくつか挙げられている特徴。まずはメリットから。
- Javaのスタブファイルを作らないので、スタブ関連の問題が起きない
- GMavenだとスタブファイルを作って、それに対してビルドをかける
- Eclipseエディタで使用されているものと同じコンパイラなので、EclipseとMavenでのビルドに差異が起きにくい
- 枯れているmaven-compiler-pluginを使用している
- 設定 > ビルド定義で後述してます
続いて、欠点。
- 現状、Groovy 1.7.5のみのサポート
- スタブが作られないので、Groovydoc(Javadoc)も作られない
- Groovy Mojoがサポートされない
- 具体的にどういうデメリットになるかはちょっと分かってません。すいません。。。
あと注意点として、Groovyファイルが一つもないとJavaファイルもコンパイルされません。プロダクトコード側にはGroovyファイルは必要ないってときにも、ダミーのファイルを置いてやる必要があるみたいですね。テストにのみ使用したいという自分の状況だと、これちょっとやるせないな。
設定
以下の説明を含んだ全ての設定は、Github上にあげています。
リポジトリの追加
repository / pluginRepositoryに追加します。URLを見て分かる通り、まだSNAPSHOTバージョンですね。
<repositories> <repository> <id>springsource</id> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> <url>http://maven.springframework.org/snapshot</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>springsource</id> <url>http://maven.springframework.org/snapshot</url> </pluginRepository> </pluginRepositories>
ビルド定義
まず、maven-compiler-pluginの設定で、デフォルトのJavaコンパイラからGroovyエディタで使用しているコンパイラに変更します。ちなみに、
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <compilerId>groovy-eclipse-compiler</compilerId> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>0.5.1-SNAPSHOT</version> </dependency> </dependencies> </plugin>
続いて、Eclipse上にインポートしたときにGroovy natureを付ける設定。もちろん、Eclipseを使わない人は必要ありません。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.8</version> <configuration> <additionalProjectnatures> <additionalProjectnature>org.eclipse.jdt.groovy.core.groovyNature</additionalProjectnature> </additionalProjectnatures> </configuration> </plugin>
最後に、src/main/groovyとsrc/test/groovyという、groovy用のソースフォルダを定義します。公式ドキュメントとはちょっと変えて、src/test/groovyはtest用のパスに通すように。
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.5</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/main/groovy</source> </sources> </configuration> </execution> <execution> <id>add-test-source</id> <phase>generate-sources</phase> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>src/test/groovy</source> </sources> </configuration> </execution> </executions> </plugin>
依存性管理
Groovyを使うので、Groovyを依存ライブラリに追加。
<dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.7.10</version> </dependency> </dependencies>
感想
まだスナップショット版ということもあって、これを全面採用は難しいでしょうね。ただ、Groovy-Eclipseエディタは頻繁にバージョンアップしてるので、あまりメンテナンスされてないように見えるGMavenより将来性という点では期待できる・・・かも。
実は、Groovyを読み書きするのはIntelliJ IDEAでやるつもりだったのです。で、Groovyだけ読み書きするのであればIntelliJでいいのですが、今回のように一部Java・一部Groovyの構成だとちょっと面倒。自分にとっては、Java開発はやっぱりEclipseが一番慣れているので。
Groovy-Eclipseエディタもどんどん改良されてるし、やっぱりEclipse一本で通したほうがいいのかな。以前は型推論が確か効かなかったような気がするのですが、今は大体できてるし(クロージャの中はちょっと怪しいけど)。型推論とCtrl+1のクイックフィックスがJDT並にできるようになると、嬉しいんですけどね。