倭マン's BLOG

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

Maven2/3

アスペクト・ライブラリを作る 其ノ壱 -- サンプル

アスペクト指向プログラミングの1つの使用法として、「既存のライブラリにアスペクトを織り込んで、機能を拡張する」というものがあります。 この織り込む機能を実装した AspectJ コード(と成果物)を「アスペクト・ライブラリ」と呼びましょう。今回から何…

Archetype -- 以前の方法でプロジェクトを作成する

前回、対話的にプロジェクトを作成する方法を見ました。ただし、この方法では独自の archetype を使ったプロジェクト生成ができない(っぽい)ので*1、以前の方法でプロジェクトを生成する方法を見てみましょう。概要 一般には、以前のバージョンのライブラ…

Archetype -- 対話的にプロジェクトを作成する

Maven1.x では出来ていた「対話的にプロジェクトを作成する」ことが、やっとこさ Maven2 でも出来るようになりました(こちらやmarsのメモを参考)。作成方法 適当なフォルダ上でコマンド「mvn archetype:creategenerate」を実行すると、プロジェクト作成プ…

プラグインを作ろう!(15) -- @component:Maven2 内のコンポーネントを取得する

前々回、Mojo 内からPOM ファイル内の要素(をモデル化したオブジェクト)を取得する方法を見ました。今回は POM ファイル内ではなく、Maven2 内で動いているコンポーネントを取得する方法を見てみましょう。 ただし、取得の仕方は簡単ですが、どうやって使…

プラグインを作ろう!(14) -- プロジェクトの構成要素を扱ったプラグインのサンプル

前回、@parameter アノテーションを使用してプロジェクトの構成要素を取得する方法を見ました。 今回は、これを用いて簡単なサンプル・プラグインを作ってみましょう。サンプルの概要は、「maven-compiler-plugin にエンコーディングが設定されていれば、そ…

プラグインを作ろう! (13) -- プロジェクトの構成要素を取得する

プロジェクトの構成要素の取得方法 以前の記事で、パラメータ(JavaDoc アノテーション「@parameter」を付加したフィールド)に値を代入するには引数 expression を付加ればいいというのを見ました: /** * @parameter expression="${project.packaging}" */…

プラグインを作ろう! (12) -- その他のパラメータレベル・アノテーション

今回は、パラメータに付加するアノテーションを幾つかご紹〜介。 詳しくはこちらを参照。@required 必ず設定が必要なパラメータがある場合、「@required アノテーション」を付加します: /** * @parameter * @required */ private String target もし POM フ…

プラグインを作ろう! (11) -- パラメータ値の型:multiple value

前回に続き、今回は「多重値 (multiple value)」*1のパラメータを見ていきましょう。 「多重値」とは、配列やコレクション・フレームワーク内の型などのことです。使用できる「多重値」の型 具体的な「多重値」の型には以下のようなものがあります: 配列 ja…

プラグインを作ろう! (10) -- パラメータ値の型:one value

前回はパラメータの定義の仕方を見ましたが、パラメータ値の型は文字列 (String) としていました。 実際には文字列以外にもいろいろな型のパラメータを定義することができます。パラメータ値の型は、プリミティブ型のような「単一値 (one value)」と、コレク…

プラグインを作ろう! (9) -- @parameter:パラメータを使う

Mojo も Java オブジェクトなのでフィールドを宣言して使用することが多いと思いますが、そのフィールドの値を外部から設定できるようにしておくと柔軟性が向上します。 Mojo ではこれをパラメータと呼びます。以下でパラメータの定義や設定の仕方を見ていき…

プラグインを作ろう! (8) -- その他のクラスレベル・アノテーション

今までに「@goal」「@phase」「@execute」という3つのアノテーションを紹介しました。 これらはどれもクラスに付加するアノテーションでした。 その他にも幾つかクラスに付加するアノテーションがあります。 詳しくはこちらを参照。幾つかを簡単にご紹〜介*1…

プラグインを作ろう! (7) -- @execute:事前に他の処理を呼び出す

前回は、あるフェーズを実行したときに作成した mojo の処理を割り込ませる方法を見ました。 今回は自作の mojo を実行する際に、(事前に)他のフェーズやゴールの処理を呼び出す方法を見ていきます。これには「@execute アノテーション」を使います。サン…

プラグインを作ろう! (6) -- @phase:他のフェーズに処理を割り込ませる

前回は自作の mojo にゴール名を設定する仕方を見ました。 これによって、コマンド・プロンプトから自作のプラグインを実行できるようになりました。しかし実際には、何らかのフェーズ(例えばコンパイルやインストールなど)が実行されたとき、それをトリガ…

プラグインを作ろう! (5) -- @goal:ゴール名を設定する

前回までで Mojo インターフェースの仕様に関する事項は概ね終わりました。ただし、Mojo インターフェースの実装を提供するだけではまだ実際に動く mojo にはならなくて、少なくとも作成した Mojo の実装に「@goal アノテーション」*1を付加する必要がありま…

プラグインを作ろう! (4) -- Mojo#execute() と例外

Mojo#execute() メソッドを実装する際、このメソッド内で投げることの出来る例外は「MojoExecutionException」と「MojoFailureException」の2つだけです。 どちらも実行時例外ではなく、補足すべき例外です。 例外 表示されるメッセージ 内容 MojoExecutionE…

プラグインを作ろう! (3) -- Log

今回は、処理の実行中にコンソール等にメッセージを出力する方法を見てみましょう。 これには Mojo#getLog() メソッドで取得できる Log オブジェクトを使います。Log インターフェース Log インターフェースは、定義されているメソッド、使い方などが common…

プラグインを作ろう! (2) -- Mojo, AbstractMojo

前回は独自プラグインを作成するための Maven2 プロジェクト「Mojo プロジェクト」の作成・インストール・実行の手順を見ました。今回からは、プラグインで行う処理を実装する仕方を見ていきます。 Java 以外の言語を用いて処理を実装することもできるそうで…

プラグインを作ろう! (1) -- Mojo プロジェクトの作成・インストール・実行

Maven2 を用いてビルドを行う際、独自の処理を織り込みたいこともあるかと思います。 なので、何回かに渡って Maven2 プラグインの作成方法を見ていきましょう。 公式にはこちらを参照。基本的なステップは以下の通り: Mojo プロジェクトを作成する 処理を…

commons-logging-1.1.1 リリース

commons-logging-1.1.1 が Maven2 のリモート・リポジトリにアップされました。 以前の記事に書いた「依存性の <optional> 設定が間違っている」という問題点は改善されておりまする。 めでたし、めでたし。 Apache Maven 2.0入門 Java・オープンソース・ビルドツール</optional>…

プロジェクトを持ち運ぶ・バックアップをとる

以前の記事で、プロジェクトの成果物をアーカイブにまとめる方法を見ました。 同様の方法で、ソース・コードなどをアーカイブにまとめることも出来ます。アーカイブの生成方法は「assembly 記述子」というファイルで指定し、事前に定義されている「assembly …

リモート・リポジトリに登録されていない Jar ファイルを使う

Maven2 で外部ライブラリ(以下、Jar ファイルと仮定します。)を使いたい場合、POM ファイルに依存性を付加すれば Maven2 が自動的にダウンロードして使用できるようにしてくれます。 ただし、そのライブラリが Maven2 のリモート・リポジトリに存在してい…

AspectJ プロジェクトの POM ファイル

前回 Maven2 主導で AspectJ プロジェクトを作成する方法を見ました。 しかし、この手順は結構面倒臭いので、チョットでも手間が省けるように、POM ファイルのテンプレートを載せておきます(ダウンロードはこちらから)。POM ファイルのテンプレート <project> <modelVersion>4.0.0</modelVersion></project>…

Maven2 主導で AspectJ プロジェクトを作成する

以前の記事で、Eclipse 上の AspectJ プロジェクトを Maven2 で扱えるようにする方法を見ました。しかし、外部ライブラリを使用する場合、POM ファイルによって依存性を管理できるといろいろ便利です。 なので、今回は Maven2 主導の AspectJ プロジェクト作…

Aspectj -- test-compile ゴールとテスト・コード内のアスペクトの織り込み

aspect-maven-plugin には前回まで見ていた「compile ゴール」の他に、「test-compile ゴール」が定義されています。 このゴールはテスト・コードに対して「コンパイル」と「織り込み」を行います。 「test-compile ゴール」に定義されているパラメータは、…

Aspectj -- AspectJ プロジェクト(Eclipse) → Maven2 プロジェクト

AspectJ を用いてアスペクト指向開発を行う場合、「Eclipse + AJDT」という環境が最も手軽かと思います。 今回は、この環境で作成した AspectJ プロジェクトを Maven2 プロジェクトとして認識されるようにする仕方を見ていきましょう。 これによって、AJDT …

Aspectj -- 設定可能なパラメータ 其ノ弐 ライブラリと weaving

今回は、Aspect が関連するライブラリの取り扱い方を見ていきます。 以下の説明で使う例を定義しておきます(下図参照): [MyProject]・・・現在開発中のプロジェクト [Library A]・・・Java クラスを含む(通常の)外部ライブラリ [Library B]・・・ Aspec…

Aspectj -- 設定可能なパラメータ 其ノ壱

今回は、aspect-maven-plugin に定義されている「compile ゴール」で設定できるパラメータを見ていきましょう。 全て紹介するのは面倒なので、独断と偏見で幾つか見繕って説明します(次回以降にも続く。 パラメータ一覧はこちら): encoding source, targe…

Aspectj -- 必要最小限の設定とフォルダ構造

「プロジェクト管理ツール」Maven2 で、AspectJ を使用するプロジェクトを扱う方法を見ていきましょう。POM ファイルに行う変更は aspectjrt への依存性を付加する コンパイル時に weaving*1 を行うようにする です。 また、ソース・コードの配置フォルダに…

Eclipse -- その他のゴールや設定

前々回、前回で、Eclipse プラグインの基本的な使い方を紹介しました。 今回は、その他のゴールや設定をご紹介。Eclipse プロジェクト用のファイルを削除する 前々回、コマンド「mvn eclipse:eclipse」によって Eclipse プロジェクトのための設定ファイルが…

Eclipse -- Eclipse 上での設定

前回 Maven2 プロジェクトを Eclipse 上へ読み込んで開発できるようにしました。 今回は、それに関連する Eclipse 側の設定等を見ていきます。Eclipse 側から変数「M2_REPO」を設定する Eclipse 上で Maven2 のローカル・リポジトリに保存されているライブラ…