Open LibertyのMavenプラグインで使用するLibertyのランタイムを指定する

# What's？

Open Libertyを使う時にはMavenプラグイン（もしくはGradleプラグイン）を利用します。

これらを使うとOpen Libertyを含めてパッケージングや実行を行うのですが、この時にどういったランタイム（バージョン）が使われるのか気になったので調べてみました。

今回はMavenプラグインを対象にします。

# Liberty Maven Plugin

Open Libertyのドキュメント内で、Liberty Maven Pluginに関する記載はこちらにあります。

[Develop with Liberty Tools / Minimum requirements](https://openliberty.io/docs/24.0.0.7/develop-liberty-tools.html#_minimum_requirements)

Open Liberty Maven Pluginではなく、Liberty Maven Pluginです。

こちらのGitHubリポジトリがリンク先として紹介されています。

https://github.com/OpenLiberty/ci.maven

ざっくりとした使い方は、こちらのガイドを参照するとよいでしょう。

https://openliberty.io/guides/getting-started.html

Libery Maven Plugin自体のドキュメントとしては、こちらにあるMarkdownファイルを見ていくことになります。

https://github.com/OpenLiberty/ci.maven/tree/liberty-maven-3.10.3/docs

それで、今回のお題である「Open LibertyのMavenプラグインを使った時にどういったOpen Libertyのランタイムが使われるのか？」という点ですが、共通パラメータのページに記載があります。

`runtimeArtifact`がこれに該当し、使用するLibertyのMavenアーティファクトを指定します。

https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/docs/common-parameters.md

デフォルトは`io.openliberty:openliberty-kernel`の最新版が選択されるようです。

[Liberty installation configuration / Calculating the runtime artifact](https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/docs/installation-configuration.md#calculating-the-runtime-artifact)

ソースコードではこのあたりですね。

https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/BasicSupport.java#L267

https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/BasicSupport.java#L286

では選択できるLibertyのMavenアーティファクトは？というと、こちらに一覧があります。

https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/docs/installation-configuration.md

グループIDが`io.openliberty`であればOpen Liberty、`com.ibm.websphere.appserver.runtime`であればWebSphere Libertyのようです。

カーネル、ランタイム、Java EE 8、Jakarta EE 9、Web ProfileやMicroProfileといった各種プロファイル向けのアーティファクトが、Open LibertyおよびWebSphere Libertyごとに並んでいます。

どのランタイムを選ぶかですが、目的に応じたプロファイルのものを選べばいいのかなと迷ったりしそうではあります。  
とはいえ、`server.xml`の`featureManager`と`feature`で使用するフィーチャーを指定してもいいと思うので、その場合はカーネルを選べばいいような気はしますね。

https://openliberty.io/docs/24.0.0.7/reference/config/featureManager.html

https://openliberty.io/docs/24.0.0.7/reference/feature/feature-overview.html

`runtimeArtifact`の具体的な指定方法はこちらに例が書かれています。

[Liberty installation configuration / Using a Maven artifact](https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/docs/installation-configuration.md#using-a-maven-artifact)

以下に一例を。

```xml:pom.xml
...

  <build>
    ...

    <plugins>

      ...

      <plugin>
        <groupId>io.openliberty.tools</groupId>
        <artifactId>liberty-maven-plugin</artifactId>
        <version>3.10.3</version>
        <configuration>
          <runtimeArtifact>
            <groupId>io.openliberty</groupId>
            <artifactId>openliberty-kernel</artifactId>
            <version>24.0.0.7</version>
            <type>zip</type>
          </runtimeArtifact>
        </configuration>
      </plugin>

      ...

    </plugins>

    ...

  </build>

...
```

また、今回のテーマでは蛇足ではありますが、インストール済みのLibertyを指定して構築することもできます。

[Liberty installation configuration / Using an existing installation](https://github.com/OpenLiberty/ci.maven/blob/liberty-maven-3.10.3/docs/installation-configuration.md#using-an-existing-installation)

実行するタイミングでランタイムのバージョンが変わるのも困ると思いますので、明示的に指定するのがよいのかなと思います。