これは、なにをしたくて書いたもの?
WildFly 32.0.0.Finalがリリースされました。
ちょっと気になるものとしてWildFly Glowというものがあるのですが。
その前に、WildFly Maven PluginでBootable JARが作れるようになったようなのでそちらを確認してみます。
WildFly Maven PluginでBootable JARを作成する
WildFly Maven PluginでBootable JARが作れるようになったことが書かれているブログエントリーはこちら。
What's new in WildFly provisioning
これまではBootable JARは、WildFly Jar Maven Pluginを使って作るものでした。
GitHub - wildfly-extras/wildfly-jar-maven-plugin: WildFly Bootable JAR
WildFly Maven Pluginのwildfly:package
ゴールのページを見ると、bootableJar
(bootable-jar
でも可)というパラメーターが
追加されています。
WildFly Maven Plugin – wildfly:package
こちらをtrue
に設定すると、wildfly:package
時にBootable JARを作成してくれます。
他のゴールでは無効な設定です。
また、作成されるBootable JARのデフォルトのファイル名はプロジェクトのアーティファクト名に関係なくserver-bootable.jar
で、
変更する場合はbootableJarName
(bootable-jar-name
でも可)で設定する必要があります。
wildfly:start-jar
というゴールも追加されています。
WildFly Maven Plugin – wildfly:start-jar
これは、Bootable JARを起動するだけのコマンドです。
パッケージングしてBootable JARの作成まで行ってくれるわけではありません。
Bootable JARを作成せずに実行しても
$ mvn wildfly:start-jar
JARファイルがないと怒られます。
[ERROR] Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:5.0.0.Final:start-jar (default-cli) on project wildfly-maven-plugin-bootable-jar-example: Bootable JAR file '/path/to/target/server-bootable.jar' doesn't exist. -> [Help 1]
通常はjava -jar
コマンドで起動することが多いと思うので、参考までに。
ちなみに、wildfly:start-jar
ゴールはこちらのページには載っていますが
WildFly Maven Plugin – Plugin Documentation
なぜかこちらのページには載っていません…。
WildFly Maven Plugin – WildFly Maven Plugin (wildfly-maven-plugin)
では、簡単に試してみましょう。
環境
今回の環境はこちら。
$ java --version openjdk 21.0.2 2024-01-16 OpenJDK Runtime Environment (build 21.0.2+13-Ubuntu-122.04.1) OpenJDK 64-Bit Server VM (build 21.0.2+13-Ubuntu-122.04.1, mixed mode, sharing) $ mvn --version Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae) Maven home: $HOME/.sdkman/candidates/maven/current Java version: 21.0.2, vendor: Private Build, runtime: /usr/lib/jvm/java-21-openjdk-amd64 Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux", version: "5.15.0-105-generic", arch: "amd64", family: "unix"
アプリケーションを作成する
それでは、簡単なサンプルアプリケーションを作成します。Jakarta RESTful Web Services(JAX-RS)を使うだけのものにしましょう。
Maven依存関係など。
<properties> <maven.compiler.release>21</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>10.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>ROOT</finalName> <plugins> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>5.0.0.Final</version> <!-- 後で --> </plugin> </plugins> </build> </project>
packaging
はwar
です。
JAX-RSの有効化。
src/main/java/org/littlewings/wildfly/RestApplication.java
package org.littlewings.wildfly; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("") public class RestApplication extends Application { }
リソースクラス。
src/main/java/org/littlewings/wildfly/HelloResource.java
package org.littlewings.wildfly; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; @Path("hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String message() { return "Hello World!!"; } }
これで準備は完了です。
WildFly Maven PluginでBootable JARを作成する
では、WildFly Maven PluginでBootable JARを作成します。
まずは以下で設定。
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>5.0.0.Final</version> <executions> <execution> <goals> <goal>package</goal> </goals> </execution> </executions> <configuration> <!-- wildfly:dev も使うなら、finalNameで指定した方がよさそう --> <!-- <runtime-name>ROOT.war</runtime-name> --> <bootable-jar>true</bootable-jar> <feature-pack> <location>wildfly@maven(org.jboss.universe:community-universe)#32.0.0.Final</location> </feature-pack> </feature-packs> </configuration> </plugin>
package
ゴール実行時にwildfly:package
ゴールが動作するように設定。
<executions> <execution> <goals> <goal>package</goal> </goals> </execution> </executions>
いきなり脱線しますが、Bootable JAR作成時(というかプロビジョニング時)のデプロイ名をruntime-name
で変えられるのですが
<!-- wildfly:dev も使うなら、finalNameで指定した方がよさそう --> <!-- <runtime-name>ROOT.war</runtime-name> -->
コメントで書いているように、この設定はwildfly:dev
は追従しないのでどちらも同じコンテキストパスにしたいのならfinalName
で
設定する方が無難でしょう。
<build> <finalName>ROOT</finalName>
パッケージングします。
$ mvn package
できました。デフォルトのファイル名はserver-bootable.jar
です。
[INFO] Bootable JAR packaging DONE. To run the server: java -jar /path/to/target/server-bootable.jar
起動してみます。
$ java -jar target/server-bootable.jar
確認。
$ curl localhost:8080/hello Hello World!!
OKですね。
ところで、Bootable JARのサイズが237MBとけっこうなサイズです…。
$ ll -h target/server-bootable.jar -rw-rw-r-- 1 xxxxx xxxxx 237M 4月 28 19:34 target/server-bootable.jar
WildFly Glowを使うと必要なWildFlyモジュールを選んでくれるようですが、今回は自分で指定します。
こうしました。
<configuration> <bootable-jar>true</bootable-jar> <feature-packs> <feature-pack> <location>wildfly@maven(org.jboss.universe:community-universe)#32.0.0.Final</location> </feature-pack> </feature-packs> <layers> <layer>jaxrs-server</layer> </layers> </configuration>
すでにプロビジョニング済みのディレクトリがあると再度作成してくれないので、1度mvn clean
しておきます。
$ mvn clean
もしくは以下の設定を追加すると、wildfly:package
時に1度プロビジョニング済みのディレクトリを削除して実行してくれるようになります。
<overwrite-provisioned-server>true</overwrite-provisioned-server>
パッケージング。
$ mvn package
だいぶ小さくなりましたね。
$ ll -h target/server-bootable.jar -rw-rw-r-- 1 xxxxx xxxxx 111M 4月 28 19:40 target/server-bootable.jar
最後はbootable-jar-name
を指定してBootable JARファイル名を変更してみます。
<configuration> <!-- wildfly:dev も使うなら、finalNameで指定した方がよさそう --> <!-- <runtime-name>ROOT.war</runtime-name> --> <bootable-jar>true</bootable-jar> <!-- 指定しない場合は server-bootable.jar になる --> <bootable-jar-name>${project.artifactId}-${project.version}-bootable.jar</bootable-jar-name> <overwrite-provisioned-server>true</overwrite-provisioned-server> <feature-packs> <feature-pack> <location>wildfly@maven(org.jboss.universe:community-universe)#32.0.0.Final</location> </feature-pack> </feature-packs> <layers> <layer>jaxrs-server</layer> </layers> </configuration>
これでパッケージングすると、指定のファイル名でBootable JARを作成してくれます。
[INFO] Bootable JAR packaging DONE. To run the server: java -jar /path/to/target/artifact-name-0.0.1-SNAPSHOT-bootable.jar
なお、完全に蛇足ですがWildFly JAR Maven Pluginと違ってjboss-maven-dist
が使えないので、開発時にJARファイルをもっと小さく
することはできなさそうです…。
今回はこんなところで。
おわりに
WildFly Maven PluginでBootable JARを作成できるようになったということで、少し試してみました。
そのうちWildFly Glowも組み合わせて使ってみたいと思いますが、それはまたそのうちということで。