倭マン's BLOG

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

イカす達人 (3) : GMaven プロジェクトのコンパイル、テスト、インストールとか

GMaven プロジェクトのコンパイル、テスト、インストールとか


GMaven を使って作成した Groovy プロジェクトを「GMaven プロジェクト」と呼ぶことにします(一般的には使われてないと思いますが)。

前回は GMaven プロジェクトの作成方法を見ました(一覧)。 もちろん、プロジェクトを生成するのは開発の出発点なのでその後の操作の説明が必要ですが、これらは通常の Maven2 プロジェクトと同じなので簡単に触れる程度にします。

  • 他のライブラリへの依存性を付加する
  • ソースコードをコンパイルする
  • テストする
  • ローカルリポジトリにインストールする

ただし、Eclipse などの IDE を使うにはいろいろ設定が必要です。 これらは後日に。

★他のライブラリへの依存性を付加する


例えば「MVN Repository」から、使用したい成果物(ライブラリ)の groupId, artifactId, version を調べて、pom.xml に記述します。 ザッとした説明は、例えばこちら

ソースコードをコンパイルする


ベースフォルダ上で以下のコマンドを実行します:

mvn compile

★テストする


ベースフォルダ上で以下のコマンドを実行します:

mvn test

このコマンドを実行すると、テストを行う前に compile フェーズを実行します。

★ローカルリポジトリにインストールする


Maven2 での「インストール」とは、Jar ファイルなどの成果物をローカルリポジトリ(「${user.home}/.m2」フォルダと思って下さい)へ配備する(コピーする)ことです。 これによって、作成した成果物を他のプロジェクトから使用することができるようになります。

「インストール」の実行には、ベースフォルダ上で以下のコマンドを実行します:

mvn install

このコマンドを実行すると、インストールを行う前に compile フェーズと test フェーズを実行します。

コンパイルフェーズの挙動をチョット詳しく


GMaven プロジェクトで開発を行う場合、上記のフェーズでどう言った処理をしているかを詳しく知っている必要はありませんが、以下ではコンパイルフェーズを実行した際に行われる処理の概要を見ていきます。

この際、「Groovy ファイル」のみのプロジェクトで見ていっても素っ気ないので、「Java ファイル」や「リソースファイル*1」なども含んでいるプロジェクトを念頭に置いて見ていきます。 それぞれのファイルは以下のフォルダに配置します。

  • Groovy ファイル --- 「src/main/groovy」フォルダ
  • Java ファイル --- 「src/main/java」フォルダ(「src/main/groovy」でも大丈夫そう)
  • リソースファイル --- 「src/main/resources」フォルダ

ちなみに、ここでは扱いませんが、テストに関係するファイルを扱う場合は

  • Groovy ファイル --- 「test/main/groovy」フォルダ
  • Java ファイル --- 「test/main/java」フォルダ
  • リソースファイル --- 「test/main/resources」フォルダ

に配置してください。

★GMaven プロジェクトのフォルダ構造

まず、フォルダ構造の説明。 GMaven プロジェクトでソースを配置する「src/main」フォルダと、コンパイル等々で生成されるファイルを配置する「target」フォルダを下図のように表すことにします。

コンパイルフェーズで実行されるゴール(行われる処理)は次の3つです:

  1. groovy:generateStubs
  2. resouces:resources
  3. compiler:compile, groovy:compile

以下でこれらの各ステップを見ていきます。

★groovy:generateStubs

groovy:generateStubs ゴールでは、Groovy ファイルをプリコンパイルするためのスタブコードを生成します。

挙動:「src/main/groovy」フォルダ下にある Groovy ファイルから、「target/generated-sources/groovy-stubs/main」フォルダ下にスタブとなる Java ファイル を生成します。

★resources:resources

resources:resources ゴールでは、リソースファイルを「target」フォルダ下にコピーします。

挙動:「src/main/resources」フォルダ下にあるリソースファイルを「target/classes」フォルダ下に配置にコピーします。 フィルターなどの設定をしていなければ、そのままコピーするだけです。

★compiler:compile, groovy:compile

compiler:compilegroovy:compile ゴールでは、Java ファイルをコンパイルします。

このコンパイルでのソースとなる Java ファイルは、通常作成する「src/main/java」フォルダ下の Java ファイルと、スタブとして生成された「target/generated-sources/groovy-stubs/main」フォルダ下の Java ファイルです。 それ以外に「src/main/groovy」フォルダ下の Groovy ファイルが参照されるのかどうかは不明(確かめるの面倒)*2。 class ファイルは「target/classes」フォルダに作成されます。

GMaven に定義されているゴール


GMaven には、以下の4つのゴールが定義されています:

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

Apache Maven 2.0入門 Java・オープンソース・ビルドツール


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

*1:「リソースファイル」とは、プロパティファイルとか、META-INF とか、JavaDoc の package.html とか、リソースバンドルのためのファイルとか・・・ まぁ、ここでは Java ファイルでも Groovy ファイルでもないファイルくらいの気持ちで。

*2:archetype:generate で生成されるサンプルに対して、スタブを生成した(groovy:generateStubs を実行した)後に Groovy ファイルを削除して groovy:compile, compiler:compile を実行すると、一応キチンとコンパイルが通りましたが・・・