CLOVER🍀

That was when it all began.

Jakarta EE PlatformおよびProfileとMicroProfileのJARとBOMについて

これは、なにをしたくて書いたもの?

Jakarta EE PlatformおよびProfileおよびMicroProfileで使うAPIのJARやBOMについて、少しまとめておきたいと思いまして。

ここでは、Jakarta Servletといった個々の仕様の話よりも、Web Profileといったある程度の仕様をひとまとめに扱うものを対象にします。
なので、Jakarta EE PlatformおよびProfileです。

バージョンに依存するものはJakarta EE 10とMicroProfile 6.1とします。

Jakarta EE PlatformおよびProfile

まずはJakarta EEから。

Jakarta® EE | Cloud Native Enterprise Java | Java EE | the Eclipse Foundation | The Eclipse Foundation

Jakarta EEのPlatformおよびProfileについては、Platform、Web Profile、Core Profileの3つがあります。

Jakarta EE 10での各ページはこちら。

ページ内には、これらをひとまとめにしたJARへの参照が書かれています。

たとえば、Web Profileでいえば以下をdependenciesに追加することでWeb Profileで使えるAPI仕様をまとめて取り込めます。

        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-web-api</artifactId>
            <version>10.0.0</version>
            <scope>provided</scope>
        </dependency>

ところでBOMに関する記述が見当たらないのですが、jakartaee-bomというものがあります。

https://search.maven.org/search?q=a:jakarta.jakartaee-bom

BOMなのでimportして個々のAPI仕様をdependenciesに追加していくことになります。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>jakarta.platform</groupId>
                <artifactId>jakarta.jakartaee-bom</artifactId>
                <version>10.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

これらのAPIのJARやBOMは、以下のGitHubリポジトリーにあるようです。

GitHub - jakartaee/jakartaee-api: jakartaee-api

MicroProfile

続いて、MicroProfileです。

Home - MicroProfile

各バージョンのページはこちら。

MicroProfile 6.0以降は、Jakarta EE 10が必要です。

MicroProfileにもBOMがあるのですが、、こちらのGitHubリポジトリーにあるようです。

GitHub - eclipse/microprofile: Repository for important documentation - the index to the project / community

使い方はREADME.mdに書かれているのですが、2つの使い方があります。

ひとつは、BOMを単体でdependenciesに突っ込みます。scopeprovidedになっているところがポイントです。

    <dependencies>
        <dependency>
            <groupId>org.eclipse.microprofile</groupId>
            <artifactId>microprofile</artifactId>
            <version>6.1</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
    </dependencies>

これで指定したMicroProfileのバージョン(ここでは、6.1)に含まれるすべてのAPI仕様が依存関係に追加されます。

mvn dependency:treeで見てみます。

$ mvn dependency:tree

こんな感じになりました。

[INFO] --- dependency:3.6.1:tree (default-cli) @ xxxxx ---
[INFO] org.xxxxx:xxxxx:war:0.0.1-SNAPSHOT
[INFO] \- org.eclipse.microprofile:microprofile:pom:6.1:provided
[INFO]    +- jakarta.platform:jakarta.jakartaee-core-api:jar:10.0.0:provided
[INFO]    |  +- jakarta.ws.rs:jakarta.ws.rs-api:jar:3.1.0:provided
[INFO]    |  +- jakarta.json:jakarta.json-api:jar:2.1.0:provided
[INFO]    |  +- jakarta.json.bind:jakarta.json.bind-api:jar:3.0.0:provided
[INFO]    |  +- jakarta.annotation:jakarta.annotation-api:jar:2.1.1:provided
[INFO]    |  +- jakarta.interceptor:jakarta.interceptor-api:jar:2.1.0:provided
[INFO]    |  +- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:4.0.1:provided
[INFO]    |  +- jakarta.inject:jakarta.inject-api:jar:2.0.1:provided
[INFO]    |  \- jakarta.enterprise:jakarta.enterprise.lang-model:jar:4.0.1:provided
[INFO]    +- org.eclipse.microprofile.config:microprofile-config-api:jar:3.1:provided
[INFO]    +- org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-api:jar:4.0.2:provided
[INFO]    +- org.eclipse.microprofile.health:microprofile-health-api:jar:4.0.1:provided
[INFO]    +- org.eclipse.microprofile.metrics:microprofile-metrics-api:jar:5.1.0:provided
[INFO]    +- org.eclipse.microprofile.jwt:microprofile-jwt-auth-api:jar:2.1:provided
[INFO]    +- org.eclipse.microprofile.openapi:microprofile-openapi-api:jar:3.1.1:provided
[INFO]    \- org.eclipse.microprofile.rest.client:microprofile-rest-client-api:jar:3.0.1:provided

Jakarta EE Core Profileも含まれていますね。

もうひとつは、BOMとしてimportとしてMicroProfileの個々のAPI仕様をdependenciesに追加する使い方です。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.eclipse.microprofile</groupId>
                <artifactId>microprofile</artifactId>
                <version>6.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.eclipse.microprofile.config</groupId>
            <artifactId>microprofile-config-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.microprofile.metrics</groupId>
            <artifactId>microprofile-metrics-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-core-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

Jakarta EE Core Profileも含めることができます。

README.mdに書かれているように、Jakara EE Core Profileに含まれる個々のAPI仕様を指定することはできないようです。

        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <scope>provided</scope>
        </dependency>

こういうのを入れると、「バージョンがわからない」と言われます。

おわりに

Jakarta EE PlatformおよびProfileとMicroProfileのJARとBOMについて、ちょっとまとめておきました。

BOMの存在をよく忘れるので、覚えておこうと思います…。