1. 概要

Mavenアーキタイプは、具体的なカスタマイズされたMavenプロジェクトにインスタンス化できる一種のプロジェクトの抽象化です。 つまり、は、他のプロジェクトを作成するためのテンプレートプロジェクトテンプレートです

アーキタイプを使用する主な利点は、プロジェクト開発を標準化し、開発者がプロジェクトをより迅速にブートストラップしながら、ベストプラクティスに簡単に従うことができるようにすることです。

このチュートリアルでは、カスタムアーキタイプを作成する方法と、それを使用してmaven-archetype-pluginを介してMavenプロジェクトを生成する方法を説明します。

2. Mavenアーキタイプ記述子

Mavenアーキタイプ記述子は、アーキタイププロジェクトの心臓部です。 これはarchetype-metadata.xmlという名前のXMLファイルであり、jarの META-INF /mavenディレクトリにあります。

アーキタイプのメタデータを説明するために使用されます。

<archetype-descriptor
  ...
  name="custom-archetype">

    <requiredProperties>
        <requiredProperty key="foo">
            <defaultValue>bar</defaultValue>
        </requiredProperty>
    </requiredProperties>

    <fileSets>
        <fileSet filtered="true" packaged="true">
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </fileSet>
    </fileSets>

    <modules>
        <module name="sub-module"></module>
    </modules>

</archetype-descriptor>

requiredProperties タグは、プロジェクトの生成中にプロパティを提供するために使用されます。 したがって、デフォルト値を受け入れるかどうかを選択して、それらの値を指定するように求められます。

一方、 fileSets、は、具体的に生成されたプロジェクトにコピーされるリソースを構成するために使用されます。 フィルタリングされたファイルは、生成プロセス中にプレースホルダーが指定された値に置き換えられることを意味します。

また、fileSetpackaged=” true” を使用すると、選択したファイルがpackageプロパティで指定されたフォルダー階層に追加されるということです。 。

マルチモジュールプロジェクトを生成する場合は、タグmodulesが生成されたプロジェクトのすべてのモジュールを構成するのに役立ちます。

このファイルはArchetype2以降に関するものであることに注意してください。 バージョン1.0.xでは、ファイルは archetype.xml と呼ばれ、構造が異なります。

詳細については、公式Apacheドキュメントを必ずご覧ください。

3. アーキタイプを作成する方法

アーキタイプは通常のMavenプロジェクトであり、次の追加コンテンツがあります

  • src / main / resources / archetype-resources は、新しく作成されたプロジェクトにリソースをコピーするためのテンプレートです。
  • src / main / resources / META-INF / maven / archetype-metadata.xml :アーキタイプのメタデータを記述するために使用される記述子です

アーキタイプを手動で作成するには、新しく作成したMavenプロジェクトから始めて、上記のリソースを追加します。

または、 archetype-maven-plugin、を使用して生成し、archetype-resourcesディレクトリおよびarchetype-metadata.xmlのコンテンツをカスタマイズすることもできます。ファイル。

アーキタイプを生成するには、次を使用できます。

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
  -DarchetypeGroupId=maven-archetype \
  -DgroupId=com.baeldung \
  -DartifactId=test-archetype

既存のMavenプロジェクトからアーキタイプを作成することもできます。

mvn archetype:create-from-project

target /generated-sources / archetype、で生成され、すぐに使用できます。

アーキタイプをどのように作成したとしても、最終的には次の構造になります。

archetype-root/
├── pom.xml
└── src
    └── main
        ├── java
        └── resources
            ├── archetype-resources
            │   ├── pom.xml
            │   └── src
            └── META-INF
                └── maven
                    └── archetype-metadata.xml

これで、 archetype-resources ディレクトリにリソースを配置し、 archetype-metadata.xml ファイルでそれらを構成することにより、アーキタイプの構築を開始できます。

4. アーキタイプの構築

これで、アーキタイプをカスタマイズする準備が整いました。 このプロセスのハイライトとして、JAX-RS2.1に基づいてRESTfulアプリケーションを生成するための単純なMavenアーキタイプの作成を紹介します。

それをmaven-archetypeと呼びましょう。

4.1. アーキタイプパッケージング

maven-archetypeディレクトリの下にあるarchetypeプロジェクトのpom.xmlを変更することから始めましょう。

<packaging>maven-archetype</packaging>

このタイプのパッケージは、archetype-packaging拡張機能のおかげで利用できます。

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.archetype</groupId>
            <artifactId>archetype-packaging</artifactId>
            <version>3.0.1</version>
        </extension>
    </extensions>
    <!--....-->
</build>

4.2. pom.xmlを追加します

次に、archetype-resourcesディレクトリの下にあるpom.xmlファイルを作成しましょう。

<project ...>

    <groupId>${groupId}</groupId>
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>        
    </dependencies>

</project>

ご覧のとおり、 groupId、artifactId 、およびversionはパラメーター化されています。 これらは、このアーキタイプから新しいプロジェクトを作成するときに置き換えられます。

依存関係やプラグインなど、生成されたプロジェクトに必要なすべてのものをpom.xmlに配置できます。 ここでは、RESTfulベースのアプリケーションを生成するためにアーキタイプが使用されるため、JAXRS依存関係を追加しました。

4.3. 必要なリソースの追加

次に、 archetype-resources / src / main /javaにアプリケーションのJavaコードを追加できます。

JAX-RSアプリケーションを構成するためのクラス:

package ${package};
// import
@ApplicationPath("${app-path}")
public class AppConfig extends Application {
}

そして、pingリソースのクラス:

@Path("ping")
public class PingResource{
    //...
}

最後に、サーバー構成ファイルserver.xmlarchetype-resources/ src / main / config /libertyに配置します。

4.4. メタデータの構成

必要なすべてのリソースを追加したら、archetype-metadata.xmlファイルを介して生成中にコピーするリソースを構成できます。

すべてのJavaソースファイルをコピーすることをアーキタイプに伝えることができます。

<archetype-descriptor
  name="maven-archetype">
    
    <!--...-->
    <fileSets>
        <fileSet filtered="true" packaged="true">
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>src/main/config/liberty</directory>
            <includes>
                <include>server.xml</include>
            </includes>
        </fileSet>
    </fileSets>

</archetype-descriptor>

ここでは、 src / main / java ディレクトリのすべてのJavaファイルと、 src / main / config / liberty、server.xmlファイルをコピーされました。

4.5. アーキタイプのインストール

すべてをまとめ終えたので、次のコマンドを呼び出してアーキタイプをインストールできます。

mvn install

この時点で、アーキタイプはMavenローカルリポジトリにあるファイル archetype-catalog.xml、に登録されているため、使用できるようになっています。

5. インストールされたアーキタイプの使用

maven-archetype-pluginを使用すると、ユーザーは生成ゴールと既存のアーキタイプ を介してMavenプロジェクトを作成できます。このプラグインの詳細については、ホームページ[ X204X]。

このコマンドは、このプラグインを使用して、アーキタイプからMavenプロジェクトを生成します。

mvn archetype:generate -DarchetypeGroupId=com.baeldung.archetypes
                       -DarchetypeArtifactId=maven-archetype
                       -DarchetypeVersion=1.0-SNAPSHOT
                       -DgroupId=com.baeldung.restful
                       -DartifactId=cool-jaxrs-sample
                       -Dversion=1.0-SNAPSHOT

次に、アーキタイプのGAVを maven-archetype-plugin:generateゴールへの引数として渡す必要があります。 生成したい具体的なプロジェクトのGAVを渡すこともできます。それ以外の場合は、インタラクティブモードで提供できます。

したがって、具体的な cool-jaxrs-sample で生成されたプロジェクトは、変更なしで実行する準備ができています。 したがって、次のコマンドを呼び出すだけで実行できます。

mvn package liberty:run

次に、次のURLにアクセスできます。

http://localhost:9080/cool-jaxrs-sample/<app-path>/ping

6. 結論

この記事では、Mavenアーキタイプを構築して使用する方法を紹介しました。

アーキタイプを作成する方法と、archetype-metadata.xmlファイルを使用してテンプレートリソースを構成する方法を示しました。

コードは、いつものように、Githubにあります。