MavenプロジェクトでGroovyを使う

Groovyを使ってJavaプログラムのテストコードを、と言われる割にはどのように設定すればgroovyファイルをビルド出来るのかという詳しい情報が見当たらなかったので調べたことをまとめます。

今回の環境
Maven 3.0.3
NetBeans7.0
Groovy 1.8


mavenプロジェクトでGroovyファイルをコンパイルするには、gmavenを使用しますが別途インストールなどをする必要はありません。
まずは、Mavenのpom.xmlファイルに以下の設定を追加します。

/project/build/plugins下

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <goals>
        <goal>generateStubs</goal>
        <goal>compile</goal>
        <goal>generateTestStubs</goal>
        <goal>testCompile</goal>
      </goals>      
      <configuration>
        <providerSelection>1.7</providerSelection>
      </configuration>
    </execution>
  </executions>      
  <dependencies>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>1.8.0</version>
    </dependency>
  </dependencies>
</plugin>

/project/dependencies下

<dependency>
  <groupId>org.codehaus.groovy</groupId>
  <artifactId>groovy-all</artifactId>
  <version>1.8</version>
</dependency>

これでpom.xmlの設定は完了です。
動作の確認のため、試しにgroovyクラスを作成します。
まずは、groovyファイルを置くためにsrcディレクトリの下にgroovyディレクトリを追加します。基本的に、groovyファイルはsrc/groovyディレクトリ内に置いておかないとコンパイルされないので注意が必要です。(テストの場合はtest/groovy)
groovyディレクトリを追加すると、NetBeansの場合はGroovyパッケージが表示されるはずなので、ここにgroovyファイルを追加していきます。


Groovyプラグインをインストールしてあれば、Groovyクラスが作成できるので、取り敢えず"sample"という名前のフォルダを追加し、その下に新規Groovyクラスを追加します。

試しに追加したファイルに"Hello Groovy"と出力する簡単なプログラムを記述して、Shift+F6でファイルを実行してみましょう。
NewGrrovyClass.groovy

package sample

class Test {
    
  def hello(){
    println "Hello Groovy"
  }
}    

def instance = new Test()
instance.hello()

コンパイルが実行され、"Hello Groovy"と出力されれば成功です。

Scanning for projects...
                                                                        
------------------------------------------------------------------------
Building groovyinjava 1.0-SNAPSHOT
------------------------------------------------------------------------

[gmaven-plugin:generateStubs]
Generated 2 Java stubs

[resources:resources]
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory /Volumes/WB1T/valiant/NetBeansProjects/groovyinjava/src/main/resources

[compiler:compile]
Compiling 1 source file to /Volumes/WB1T/valiant/NetBeansProjects/groovyinjava/target/classes

[gmaven-plugin:compile]
Compiled 2 Groovy classes

[exec:exec]
Hello Groovy
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 4.319s
Finished at: Mon Jun 06 01:13:20 JST 2011
Final Memory: 11M/81M
------------------------------------------------------------------------

もちろんJava側からも呼べますし、入力補完も効きます。
App.java

package jp.navalvessel.groovyinjava;

import sample.Test;

public class App 
{
    public static void main( String[] args )
    {
        Test instance = new Test();
        instance.hello();
    }
}