倭マン's BLOG

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

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

今回から何回かにわたり、GMaven の使い方を見ていきます(一覧)。

今回の内容

  • プロジェクトを生成する
    • 対話的にプロジェクトを生成する
    • パラメータを指定してプロジェクトを生成する
  • 生成されるプロジェクト
    • ディレクトリ構造
    • pom.xml

プロジェクトを生成する


★対話的にプロジェクトを生成する★

GMaven のサイトには後に説明する「パラメータを指定してプロジェクトを生成する」方法が書かれてますが、明らかに面倒なので、通常は以下で説明する「対話的にプロジェクトを生成する」方法の方が良いでしょう。

対話的にプロジェクトを生成する」手順は以下の通りです:

  1. プロジェクトを生成したいフォルダ上で、コマンド「mvn archetype:generate」を実行する
  2. gmaven-archetype-basic (Groovy basic archetype)」の番号(40)を選択する
  3. グループ ID を入力する
  4. アーティファクト ID を入力する
  5. バージョンを入力する(デフォルト値は「1.0-SNAPSHOT」)
  6. パッケージ名を入力する(デフォルト値はグループ ID と同じ)
  7. プロジェクトを生成するなら「y」(yes) を入力する

ただし、この方法では、最初に実行するコマンド

mvn archetype:generate

だけを覚えておくだけで OK です。

このプロジェクト生成で表示されるメッセージなどは以下のようになってます:


>mvn archetype:generate
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => '〜'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (〜)
Choose archetype:
1: internal -> appfuse-basic-jsf (〜)
2: internal -> appfuse-basic-spring (〜)
〜〜〜
40: internal -> gmaven-archetype-basic (Groovy basic archetype)
41: internal -> gmaven-archetype-mojo (Groovy mojo archetype)

Choose a number: (1/2/〜〜〜/40/41) 15: : 40[Enter]
Define value for groupId: : org.sample[Enter]
Define value for artifactId: : sample[Enter]
Define value for version: 1.0-SNAPSHOT: : [Enter]
Define value for package: org.sample: : [Enter]
Confirm properties configuration:
name: Example Project
groupId: org.sample
artifactId: sample
version: 1.0-SNAPSHOT
package: org.sample
Y: : y[Enter]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 50 seconds
[INFO] Finished at: Tue Apr 06 18:43:41 JST 2010
[INFO] Final Memory: 8M/21M
[INFO] ------------------------------------------------------------------------

  • 太字・斜体の部分が自分で入力する箇所です。
  • 上記のコマンドでうまくいかない場合は、「-U」オプションを付けて実行して見てください。
    「mvn -U archetype:generate」
  • 「Groovy Mojo Project」を生成したい場合は、40番ではなく41番を指定します。

★パラメータを指定してプロジェクトを生成する★

一応、GMaven のサイトに載っている方法も紹介しておきます。

この方法では、「mvn archetype:generate」コマンドの後に(1行で )以下のパラメータを指定します。

パラメータ名 パラメータ値
archetypeGroupId org.codehaus.groovy.maven.archetypes
archetypeArtifactId gmaven-archetype-basic

具体的には以下のコマンド

mvn archetype:generate
-DarchetypeGroupId=org.codehaus.groovy.maven.archetypes
-DarchetypeArtifactId=gmaven-archetype-basic

を実行します(1行で)。

実行後は、「対話的にプロジェクトを生成する」方法と同じようにグループ ID やアーティファクト ID を入力していけば、プロジェクトを生成できます。

  • GMaven のサイトには「archetypeVersion を指定する必要がある」となってますが、特に必要はなさそうです(デフォルト値が1.0のようです)。

生成されるプロジェクト


以下では、生成されたプロジェクトの「ディレクトリ構造」と「pom.xml」ファイルを見ていきます。

ディレクトリ構造

生成されるプロジェクトのディレクトリ構造は以下のようになっています:

  • pom.xml」後ほど。
  • src/main/groovy」アーティファクト(成果物)に含めるソースコード (Groovy ファイル) はこのフォルダ下に配置します。
  • src/test/groovy」テストコード (Groovy ファイル) はこのフォルダ下に配置します。

まぁ、Maven2 にとっては、いたって普通の フォルダ構造というところでしょう。

pom.xml

pom.xml には

  • groovy-runtime への依存性
  • JUnit への依存性
  • GMaven プラグインの設定

がデフォルトで書かれています。

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Generated from archetype; please customize.
-->

<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>
    <name>Example Project</name>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy.maven.runtime</groupId>
            <artifactId>gmaven-runtime-default</artifactId>
            <version>1.0-rc-3</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.groovy.maven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>1.0-rc-3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generateStubs</goal>
                            <goal>compile</goal>
                            <goal>generateTestStubs</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Groovyイン・アクション

Groovyイン・アクション