Menu Close

第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 ファイルは、現在のプロジェクトの Project Object Model(POM)です。これには、現在のプロジェクトの構築方法の完全な説明が含まれています。pom.xml ファイルは完全に自己完結型ですが、頻繁には(より複雑な Maven プロジェクトの) 親 POM ファイルから設定をインポートできます。

プロジェクトのビルド後、pom.xml ファイルのコピーは自動的に生成された JAR ファイルの以下の場所に組み込まれます。

META-INF/maven/groupId/artifactId/pom.xml

18.1.4. src ディレクトリーおよび target ディレクトリー

src/ ディレクトリーには、プロジェクトの開発中に機能するすべてのコードおよびリソースファイルが含まれます。

target/ ディレクトリーには、ビルドの結果(通常は JAR ファイル)と、ビルド時に生成されるすべての中間ファイルが含まれます。たとえば、ビルドを実行すると、target/classes/ ディレクトリーには、リソースファイルのコピーとコンパイルされた Java クラスが含まれます。

18.1.5. main ディレクトリーおよび test ディレクトリー

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 コンテナーのサポートが組み込まれています。これは、プロジェクトに Blueprint 設定ファイル OSGI-INF/blueprint/*.xml を含める だけで有効にできます。Blueprint コンテナーの詳細は、12章OSGi サービス を参照してください。