第18章 Maven でのビルド
概要
Maven は、Apache Maven プロジェクトで利用できるオープンソースのビルドシステムです。本章では、基本的な Maven の概念の一部と、Red Hat Fuse と連携するように Maven を設定する方法を説明します。原則では、どのビルドシステムでも OSGi バンドルをビルドできます。ただし、Red Hat Fuse による十分なサポートがあるため、Maven の使用を強く推奨しています。
18.1. Maven ディレクトリー構造
18.1.1. 概要
Maven ビルドシステムの最も重要な原則の 1 つは、Maven プロジェクト内のすべてのファイルに 標準的な場所 があることです。この原則には、いくつかの利点があります。利点の 1 つは、Maven プロジェクトに同一のディレクトリーレイアウトがあり、プロジェクトのファイルを簡単に見つけられることです。もう 1 つの利点は、Maven と統合されている各種ツールでは初期設定をほとんど必要とし ない ことです。たとえば、Java コンパイラーは、src/main/java
下のソースファイルをすべてコンパイルし、結果を target/classes
に配置する必要があることを認識しています。
18.1.2. 標準のディレクトリーレイアウト
例18.1「標準の Maven ディレクトリーレイアウト」 は、OSGi バンドルプロジェクトのビルドに関連する標準の Maven ディレクトリーレイアウトの要素を示しています。さらに、Blueprint 設定ファイル (Maven によって定義されて いない) の標準の場所も紹介しています。
例18.1 標準の Maven ディレクトリーレイアウト
ProjectDir/
pom.xml
src/
main/
java/
...
resources/
META-INF/
OSGI-INF/
blueprint/
*.xml
test/
java/
resources/
target/
...
標準のディレクトリーのレイアウトを上書きすることは可能ですが、Maven では推奨され ません。
18.1.3. pom.xml ファイル
pom.xml
ファイルは現在のプロジェクトのプロジェクトオブジェクトモデル (POM) です。これには、現在のプロジェクトのビルド方法に関する完全な説明が含まれています。pom.xml
ファイルは完全に自己完結型にすることができますが、これは頻繁に (特に複雑な Maven プロジェクトの場合) 親 POM ファイルから設定をインポートできます。
プロジェクトをビルドすると、生成された JAR ファイルの以下の場所に pom.xml
ファイルのコピーが自動的に組み込まれます。
META-INF/maven/groupId/artifactId/pom.xml
18.1.4. src とターゲットディレクトリー
src/
ディレクトリーには、プロジェクトの開発中に作業するすべてのコードおよびリソースファイルが含まれます。
target/
ディレクトリーには、ビルドの結果 (通常は JAR ファイル) と、ビルド中に生成されたすべての中間ファイルが含まれます。たとえば、ビルドの実行後、target/classes/
ディレクトリーにはリソースファイルのコピーとコンパイルした Java クラスが含まれます。
18.1.5. メインおよびテストディレクトリー
src/main/
ディレクトリーには、アーティファクトのビルドに必要なすべてのコードおよびリソースが含まれます。
src/test/
ディレクトリーには、コンパイルされたアーティファクトに対して単体テストを実行するためのすべてのコードおよびリソースが含まれます。
18.1.6. Java ディレクトリー
各 java/
サブディレクトリーには、標準の Java ディレクトリーレイアウト (ディレクトリーパス名が .
の代わりに /
で Java パッケージ名をミラーリングする) を持つ Java ソースコード (*.java
ファイル) が含まれます。src/main/java/
ディレクトリーにはバンドルソースコードが含まれ、src/test/java/
ディレクトリーには単体テストのソースコードが含まれます。
18.1.7. resources ディレクトリー
バンドルに含める設定ファイル、データファイル、または Java プロパティーがある場合は、これらを src/main/resources/
ディレクトリー下に配置する必要があります。src/main/resources/
下のファイルおよびディレクトリーは、Maven ビルドプロセスによって生成される JAR ファイルのルートにコピーされます。
src/test/resources/
下のファイルは、テストフェーズ中にのみ使用され、生成された JAR ファイルにコピーされません。
18.1.8. Blueprint コンテナー
OSGi R4.2 は、Blueprint コンテナーを定義します。Red Hat Fuse には Blueprint コンテナーのサポートが組み込まれています。これは、プロジェクト内に OSGI-INF/blueprint/*.xml
という Blueprint 設定ファイルを含むだけで有効にできます。Blueprint コンテナーの詳細は、12章OSGi サービス を参照してください。