倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

イカす達人 (8) : テストにだけ Groovy を使うプロジェクト

以前Maven2 プロジェクトで Groovy を使用する方法を見ました(一覧)。 ただし、Groovy は便利で、Java と Groovy がシームレスに連携できるとはいえ、いきなり Java プロジェクトを Groovy プロジェクトに変更できるとは限りません。

そこで、メインコードは Java のみで書き、テストコードは Groovy (と Java)で書けるというプロジェクト(の pom.xml)を考えてみます。

サンプルのパラメータ


まず、以下のサンプルで使用するパラメータを示しておきます:

パラメータ
groupId org.sample
artifactId sample
version 1.0-SNAPSHOT

pom.xml


pom.xml の概要は以下のようになります。 「...」の箇所はそれぞれ後で見ていきます。

<?xml version="1.0" encoding="UTF-8"?>
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties> ... </properties>

    <dependencies> ... </dependencies>

    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin> ... </plugin>

            <plugin> ... </plugin>
        </plugins>
    </build>
</project>
  • project/build/defaultGoal」を install に設定しているのは個人的嗜好。 特に必須ではありません。

properties : プロパティ


次は pom.xml 内で使用するプロパティの値です。 一応、この箇所を変更すればプロジェクトの設定を変更できますが、pom.xml の書き方上、変更できないモノもあります。

    <properties>
        <java.version>1.6</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <groovy.version>1.7.2</groovy.version>
        <gmaven.runtime>1.7</gmaven.runtime>
        <gmaven.version>1.2</gmaven.version>
    </properties>
  • java.version」は Java ファイルのコンパイル時に source, target に指定する値です。 まぁ、1.5, 1.6 のどちらかでしょうね。
  • project.build.sourceEncoding」はソースコードのエンコーディングです。 Javaコード、リソース、Groovy コードに対してエンコーディングを指定します。
  • groovy.version」は Groovy のバージョンです。 変更する際には 1.7.x 系だけにして下さい。
  • gmaven.runtime, gmaven.version」は基本的には変更しないでください。

dependencies : 依存性


次はプロジェクト内で使用するライブラリへの依存性です。 もちろん、必要なら他のライブラリへの依存性を追加してください。

    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • Groovy はテスト内でだけ使うので、スコープを test にしておきましょう。
  • JUnit は Groovy 内に入ってそうな気もしますが・・・ まぁ、一応。

plugin (1) : maven-compiler-plugin


プラグインその1、Java コードのコンパイルをする maven-compiler-plugin の設定。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
  • source, target を java.version プロパティの値に指定します。
  • encoding の指定も付加。

plugin (2) : gmaven-plugin


プラグインその2、テストのための Groovy コードに対してスタブコード生成 & コンパイルを行います。 指定されているゴールが generateTestStubs, testCompile の2つだけです。 dependencies 要素は Groovy 1.7 を使うために必要。

            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>${gmaven.version}</version>

                <executions>
                    <execution>
                        <goals>
                            <goal>generateTestStubs</goal>
                            <goal>testCompile</goal>
                        </goals>

                        <configuration>
                            <providerSelection>${gmaven.runtime}</providerSelection>
                            <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                        </configuration>
                    </execution>
                </executions>

                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.gmaven.runtime</groupId>
                        <artifactId>gmaven-runtime-${gmaven.runtime}</artifactId>
                        <version>${gmaven.version}</version>

                        <exclusions>
                            <exclusion>
                                <groupId>org.codehaus.groovy</groupId>
                                <artifactId>groovy-all</artifactId>
                            </exclusion>
                        </exclusions>
                    </dependency>

                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-all</artifactId>
                        <version>${groovy.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

これで設定完了です。 まぁ、Groovy 1.7を使うプロジェクトの pom.xml とそんなには違いませんね。

上記をまとめた pom.xmlこちらに置いてます。

Groovyイン・アクション

Groovyイン・アクション


Apache Maven 2 Effective Implementation: Build and Manage Applications With Maven, Continuum, and Archiva

Apache Maven 2 Effective Implementation: Build and Manage Applications With Maven, Continuum, and Archiva