倭マン's BLOG

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

イカす達人 (2) : Maven2 流 Groovy プロジェクト with Groovy 1.7

前回、GMaven でプロジェクトを生成する方法を見ましたが、どうもドキュメントが古いようで Groovy のバージョンが 1.5.6 とかでしか使えないので、Groovy, GMaven ともにもう少し新しいバージョンのものを使えるようにしましょう(一覧)。

今回の内容:

  • プロジェクトのパラメータ
  • Groovy 1.6 以前でも良い場合
  • Groovy 1.7 以降を使いたい場合

プロジェクトのパラメータ


サンプルのプロジェクトで指定しているパラメータは以下のようにしています(前回と同じ):

パラメータ名 パラメータ値
grougId org.sample
artifactId sample
version 1.0-SNAPSHOT

Groovy 1.6 以前でもよい場合


「mvn archetype:generate」コマンドで普通に Groovy 1.7 とかが使えれば問題ないのですが、残念ながら今のところ Maven Repository には Groovy 1.6 に対応するものまでしかありません(たぶんそのうち使えるようになるかと思いますが)。 で、Groovy 1.7 以降を使いたい場合は後回しにして、Groovy 1.6 まででいい場合について見ていきます。

この場合は、前回の「パラメータを指定してプロジェクトを生成する」方法を使います。 実行するコマンドは

mvn archetype:generate
-DarchetypeGroupId=org.codehaus.gmaven.archetypes
-DarchetypeArtifactId=gmaven-archetype-basic
-DarchetypeVersion=1.2

です(1行で)。 注意点は

  • archetypeGroupId が「org.codehaus.gmaven.archetypes」になっている(前回は「org.codehaus.groovy.maven.archetypes」でした)。
  • archetypeVersion を1.2と指定している(バージョンのデフォルト値は1.0だが、このバージョンは提供されていない)。

です。

Groovy 1.7 以降を使用したい場合


Groovy 1.7 を使えるようにするためには、ディレクトリ構造を作成した後、pom.xml をあれこれ書き換えます。

以下の内容は、GMaven のドキュメント(のコメント欄)からリンクの張られている Ben Tilford's Blog「Groovy 1.7.0 and GMaven 1.2 Multi Module Projects」を参考にしています。

<?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>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <groovy.version>1.7.0</groovy.version>
    <gmaven.runtime>1.7</gmaven.runtime>
    <gmaven.version>1.2</gmaven.version>
  </properties>
    
  <dependencies>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>${groovy.version}</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
    
  <build>
    <defaultGoal>install</defaultGoal>
    <plugins>
      <plugin>
        <groupId>org.codehaus.gmaven</groupId>
        <artifactId>gmaven-plugin</artifactId>
        <version>${gmaven.version}</version>
            
        <executions>
          <execution>
            <goals>
              <goal>generateStubs</goal>
              <goal>compile</goal>
              <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>
                <!-- gmaven runtime has a dependency on groovy-all v1.6 but we want 1.7.0 -->
                <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>
    </plugins>
  </build>
</project>

注意点:

  • Groovy 1.7.0, GMaven 1.2 を使用しています。 これらのバージョンを変えたい場合は、project/properties の子要素の対応するテキストを変更して下さい。
  • 前回の方法で使用される pom.xml では GMaven のグループ ID は「org.codehaus.groovy.maven」でしたが、この pom.xml では「org.codehaus.gmaven」になっています。

Groovy 1.7.0 and GMaven 1.2 Multi Module Projects」からの変更点:

  • <pluginManagement>, <dependencyManagement> 要素を使用せず、直接 <plugin>, <dependency> 要素を設定しています(子要素でこれらの設定を変更しない場合は、こちらの方が少しだけ簡潔)。
  • マルチモジュールプロジェクトを対象にしていないので、<module>, <packaging> 要素を省略しています。
  • project/build/defaultGoal を設定しています。
  • ソースコードのエンコーディングを「UTF-8」にしています。

実際にこの pom.xml を書くのは面倒なので、上記の設定を行った pom.xml を POM プロジェクトとして作成してロカールリポジトリにインストールし、その POM を継承して pom.xml を作成すれば少しは楽かと・・・ どっちにしても面倒かな(笑)

Groovyイン・アクション

Groovyイン・アクション