CLOVER🍀

That was when it all began.

WildFly Bootable JARを詊す

これは、なにをしたくお曞いたもの

WildFly Bootable JARずいうものが䟿利そうだったので、ちょっず詊しおみるこずにしたした。

WildFly Bootable JARずは

WildFly Bootable JARずはWildFly Bootable JAR Maven Pluginを䜿っお䜜成する、実行可胜JARファむルWildFly Bootable JARを
䜜る仕組みです。

GitHub - wildfly-extras/wildfly-jar-maven-plugin: WildFly Bootable JAR

WildFly Bootable JAR is final!

単玔化しお蚀うず、WARなどのアプリケヌションにWildFlyを远加しお、WildFlyを含めお実行可胜なJARファむルにする
仕組みのようです。

Spring Bootみたいですね。

WildFly Bootable JAR Maven Plugiinを䜿っお䜜成したWildFly Bootable JARは、通垞のWildFlyず同様に動䜜するそうです。
WildFly CLIを䜿っお操䜜できるこずもできるずか。

制限事項は、以䞋だそうです。

  • シャットダりン䞭のサヌバヌの再起動は䞍可
  • 実行䞭の倉曎WildFly CLIでの曎新は保持されず、サヌバヌが終了するずその倉曎も倱われる
  • サヌバヌを管理者モヌドで起動するこずはできない

ドキュメントは、こちらです。

WildFly Bootable JAR Documentation

WildFly偎のドキュメントにも、蚘茉がありたす。

Bootable JAR Guide

いずれも、WildFlyのドキュメントのトップからたどれたすね。

WildFly Documentation

登堎したのは、WildFly 20からのようです。

A bootable JAR for WildFly 20

ずころで、こう曞くずQuarkusがあるのではずも思ったりするのですが、Quarkusは盎接はWildFlyの代わりにはならないので
あくたでJakarta EEを䜿甚したアプリケヌションを実行可胜JARずしたい堎合は、こちらの仕組みを䜿うのがよいのでしょうね。

できるこずを、もう少し

WildFly Bootable JAR Maven Pluginを䜿っおできるこずを、もう少し曞いおみたしょう。

テストでの利甚に関しおは、Arquillianを䜿うようです。

https://github.com/wildfly/wildfly-arquillian/tree/3.0.1.Final/container-bootable

各皮サンプルは、こちら。

https://github.com/wildfly-extras/wildfly-jar-maven-plugin/tree/5.0.1.Final/examples

ずいうわけで、たずは䜿っおみたしょう。

環境

今回の環境は、こちらです。

$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)


$ mvn --version
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: $HOME/.sdkman/candidates/maven/current
Java version: 11.0.11, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-77-generic", arch: "amd64", family: "unix"

サンプルアプリケヌション

たずは、動䜜確認するためのサンプルアプリケヌションを䜜成したす。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>wildfly-bootable-jar-example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>

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

    <dependencies>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.enterprise</groupId>
            <artifactId>jakarta.enterprise.cdi-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

簡単な、JAX-RSCDIを䜿ったWebアプリケヌションを甚意したしょう。

src/main/java/org/littlewings/jakarta/wildfly/bootable/JaxrsActivator.java

package org.littlewings.jakarta.wildfly.bootable;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class JaxrsActivator extends Application {
}

src/main/java/org/littlewings/jakarta/wildfly/bootable/MessageResource.java

package org.littlewings.jakarta.wildfly.bootable;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

@ApplicationScoped
@Path("message")
public class MessageResource {
    @Inject
    MessageService messageService;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello(@QueryParam("word") @DefaultValue("World") String word) {
        return messageService.message(word);
    }
}

src/main/java/org/littlewings/jakarta/wildfly/bootable/MessageService.java

package org.littlewings.jakarta.wildfly.bootable;

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class MessageService {
    public String message(String word) {
        return String.format("Hello %s!!", word);
    }
}

パッケヌゞングするず、WARファむルができたす。

$ mvn package

$ ll -h target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war
-rw-rw-r-- 1 xxxxx xxxxx 4.9K  7月  3 19:01 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war

たあ、ふ぀うです。

WildFly Bootable JAR Maven Pluginを远加する

このサンプルアプリケヌションに、WildFly Bootable JAR Maven Pluginを远加しおパッケヌゞングしおみたしょう。

シンプルには、こんな感じですね。

Adding the bootable JAR Maven plugin to your pom file

    <build>
        <plugins>
            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-jar-maven-plugin</artifactId>
                <version>5.0.1.Final</version>
                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</feature-pack-location>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

feature-pack-locationで、䜿甚するWildFlyのバヌゞョンを指定したす。今回は、24.0.0.Finalです。

Specifying the WildFly server version to use

                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</feature-pack-location>
                </configuration>

バヌゞョンを指定しない堎合は、最新のWildFlyが䜿われたす。

こちらは、mvn packageで動䜜させるためのものです。

                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>

この状態でパッケヌゞングするず

$ mvn package

WildFly Bootable JAR Maven Pluginが動䜜し

[INFO] --- wildfly-jar-maven-plugin:5.0.1.Final:package (default) @ wildfly-bootable-jar-example ---
[INFO] Provisioning server configuration based on the standalone-microprofile.xml default configuration
[INFO] Building server based on [[wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final inherit-packages=false inheritConfigs=false includedConfigs [model=standalone name=standalone-microprofile.xml]]] galleon feature-packs
[INFO] Found boot artifact org.wildfly.core:wildfly-jar-boot:jar:16.0.0.Final:provided in org.wildfly:wildfly-ee-galleon-pack:24.0.0.Final
7月 03, 2021 7:06:42 午埌 org.wildfly.core.embedded.LoggerContext$JBossLoggingModuleLogger greeting
INFO: JBoss Modules version 1.11.0.Final
7月 03, 2021 7:06:42 午埌 org.jboss.msc.service.ServiceContainerImpl <clinit>
INFO: JBoss MSC version 1.4.12.Final
7月 03, 2021 7:06:42 午埌 org.jboss.threads.Version <clinit>
INFO: JBoss Threads version 2.3.2.Final
7月 03, 2021 7:06:42 午埌 org.jboss.as.server.ApplicationServerService start
INFO: WFLYSRV0049: WildFly Full 24.0.0.Final (WildFly Core 16.0.0.Final) starting
7月 03, 2021 7:06:43 午埌 org.jboss.as.patching.installation.InstallationManagerService start
INFO: WFLYPAT0050: WildFly Full cumulative patch ID is: base, one-off patches include: none
7月 03, 2021 7:06:43 午埌 org.jboss.as.server.suspend.SuspendController resume
INFO: WFLYSRV0212: Resuming server
7月 03, 2021 7:06:43 午埌 org.jboss.as.server.BootstrapListener done
INFO: WFLYSRV0025: WildFly Full 24.0.0.Final (WildFly Core 16.0.0.Final) started in 1091ms - Started 29 of 32 services (3 services are lazy, passive or on-demand)
7月 03, 2021 7:06:43 午埌 org.wildfly.security.Version <clinit>
INFO: ELY00001: WildFly Elytron version 1.16.0.Final
7月 03, 2021 7:06:45 午埌 org.jboss.as.controller.AttributeDefinition validateAndSet
INFO: WFLYCTL0028: Attribute 'security-realm' in the resource at address '/subsystem=undertow/server=default-server/https-listener=https' is deprecated, and may be removed in a future version. See the attribute description in the output of the read-resource-description operation to learn more about the deprecation.
7月 03, 2021 7:06:45 午埌 org.jboss.as.server.ApplicationServerService stop
INFO: WFLYSRV0050: WildFly Full 24.0.0.Final (WildFly Core 16.0.0.Final) stopped in 10ms
[INFO] Executing CLI, Server configuration
[INFO] CLI scripts execution done.

WARファむル以倖に、-bootable.jarず付いたJARファむルが䜜成されたす。125Mありたすけど。

$ ll -h target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT*.*
-rw-rw-r-- 1 xxxxx xxxxx 125M  7月  3 19:07 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT-bootable.jar
-rw-rw-r-- 1 xxxxx xxxxx 4.9K  7月  3 19:06 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war

このJARファむルを実行するず

$ java -jar target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT-bootable.jar

文字通りWildFlyが起動したす。

19:08:35,107 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 24.0.0.Final (WildFly Core 16.0.0.Final) started in 4582ms - Started 318 of 463 services (221 services are lazy, passive or on-demand

WARファむルは、ROOT.warずしおデプロむされたす。

19:08:35,068 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0010: Deployed "wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war" (runtime-name : "ROOT.war")

このため、コンテキストパスは/でアクセスできたす。

$ curl localhost:8080/message
Hello World!!


$ curl localhost:8080/message?word=WildFly
Hello WildFly!!

動䜜確認もできたしたね。

Bootable JAR実行時に䜿える匕数は、こちら。

Bootable JAR arguments

起動は、wildfly-jar:runやwildfly-jar:startでも行うこずができたす。

$ mvn package wildfly-jar:run

wildfly-jar:runずwildfly-jar:startの違いは、バックグラりンドで動䜜するかどうかずなりたす。

wildfly-jar:startで起動した堎合は、wildfly-jar:shutdownで停止する必芁がありたす。

$ mvn wildfly-jar:shutdown

コンテキストパスを倉曎する堎合は、contextRootずいうWildFly Bootable JAR Maven Pluginの蚭定で行うようです。

URL context path of deployed application

executionを蚭定しない堎合は

以䞋のexecutionの指定を入れない堎合、

                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>

Bootable JARを䜜成するためのコマンドはこうなりたす。

$ mvn package wildfly-jar:package

先にpackageゎヌルを指定しおおくこずが必須ずなり、wildfly-jar:package単䜓では動䜜したせん。

あくたで、デプロむ察象を先に䜜っおおくこずがポむントになりたす。Hollow JARの堎合は埮劙ですが。

wildfly-jar:runをこの前提で曞こうずするず、けっこう長くなりたす 。

$ mvn package wildfly-jar:package wildfly-jar:run

蚭定を行う

Bootable JARずしお構成されるWildFlyの蚭定を倉曎する方法はいく぀かありたすが、基本はパッケヌゞング時でしょうね。

WildFly CLIのスクリプトを䜿っお蚭定するこずになりたす。

Configuring the server during packaging

今回は、扱いたせん 。

コンポヌネントをカスタマむズする

次に、利甚するコンポヌネントをカスタマむズしおみたしょう。

Galleon configuration

Composing custom server with Galleon layers

ここで出おくるGalleonずいうのは、耇数のコンポヌネントで構成される゜フトりェアを䜜成、プロビゞョニングするための
ツヌルです。

Galleon Documentation

芁するに、WildFly Bootable JAR Maven Pluginでは、このGalleonを䜿っお利甚するコンポヌネントを遞択するこずになりたす。

デフォルトでは、standalone-microprofile.xml盞圓の構成でBootable JARが䜜成されるようです。

Specifying the set of Galleon layers to use

こちらでしょうかね

https://github.com/wildfly/wildfly/blob/24.0.0.Final/galleon-pack/galleon-content/src/main/resources/configs/standalone/standalone-microprofile.xml/config.xml

コンポヌネントの蚭定を行うには、2぀の曞き方があるようです。

ずはいえ、互いに排他的な関係ではなさそうですが。

ただ、feature-packを䜿った堎合はfeature-pack-locationを䜿ったWildFlyのバヌゞョン指定はできなくなり、
これもfeature-packずしお指定するこずになりたす。

<feature-packs>
    <feature-pack>
        <location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</location>
    </feature-pack>
    <feature-pack>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-datasources-galleon-pack</artifactId>
        <version>1.0.6.Final</version>
    </feature-pack>
</feature-packs>

デヌタ゜ヌスを扱う堎合などは、feature-packを䜿うこずになりたす。

今回は、Galleon layerのみを䜿いたす。

Galleon layerにも2皮類あり、基本なlayerBasic layerず、その組み合わせで衚珟されるFoundational layerがありたす。

この2぀のリストず、先ほどのstandalone-microprofile.xmlに曞かれおいるlayersの内容を芋るず、どのようなlayerが
遞択されおいるのかがわかるでしょう。

    <layers>
        <include name="cloud-server"/>
        <include name="h2-default-datasource"/>
        <include name="microprofile-fault-tolerance"/>
        <include name="microprofile-health"/>
        <include name="microprofile-jwt"/>
        <include name="microprofile-metrics"/>
        <include name="microprofile-openapi"/>
        <include name="microprofile-opentracing"/>
        <include name="microprofile-rest-client"/>
        <include name="undertow-legacy-https"/>
        <exclude name="management-security-realm"/>
    </layers>

https://github.com/wildfly/wildfly/blob/24.0.0.Final/galleon-pack/galleon-content/src/main/resources/configs/standalone/standalone-microprofile.xml/config.xml

たた、layerは陀倖するこずもできたす。

Excluding Galleon layers

今回は、jaxrs-serverずmanagementを入れおおきたしょう。

                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</feature-pack-location>
                    <layers>
                        <layer>jaxrs-server</layer>
                        <layer>management</layer>
                    </layers>
                </configuration>

パッケヌゞングするず
※今回はexecutionの蚭定は倖しおいたす

$ mvn package wildfly-jar:package

最初よりも、10MBほど小さくなりたした。

$ ll -h target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT*.*
-rw-rw-r-- 1 xxxxx xxxxx 114M  7月  3 20:02 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT-bootable.jar
-rw-rw-r-- 1 xxxxx xxxxx 4.9K  7月  3 20:01 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war

jaxrs-serverはFoundational layerであり、もう少し削れたす。

Basic layerである、jaxrsずcdiにしおみたしょう。

                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</feature-pack-location>
                    <layers>
                        <layer>jaxrs</layer>
                        <layer>cdi</layer>
                        <layer>management</layer>
                    </layers>
                </configuration>

䞀気に半分くらいになりたした。

$ ll -h target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT*.*
-rw-rw-r-- 1 xxxxx xxxxx  64M  7月  3 20:06 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT-bootable.jar
-rw-rw-r-- 1 xxxxx xxxxx 4.9K  7月  3 20:06 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war

こうやっお、必芁なコンポヌネントを遞んで、カスタマむズしおいくこずができたす。

Basic layerには䟝存もあり、このあたりは自動的に解決しおくれたす。

ちなみに、management layerはリモヌトアクセスでの管理機胜を提䟛するもので、WildFly Bootable JAR Maven Pluginでは
wildfly-jar:shutdownで䜿われるので、入れおおいた方が良い気がしたす。

開発で䜿う

蚭定は、以䞋に1床戻したす。

                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</feature-pack-location>
                    <layers>
                        <layer>jaxrs-server</layer>
                        <layer>management</layer>
                    </layers>
                </configuration>

ここからは、開発甚途での䜿い方を曞いおいきたしょう。

JARファむルをスリムにする

ここたで芋おきた通り、Bootable JARはそれなりのサむズになりたす。

実環境では䜿えなくなるずは思いたすが、WildFlyのモゞュヌルをロヌカルのMavenリポゞトリから䜿甚するこずで、
JARファむルのサむズを小さくするこずができたす。

Provisioning a slim bootable JAR

plugin-optionsずしお、jboss-maven-distを远加したす。

                    <plugin-options>
                        <jboss-maven-dist/>
                    </plugin-options>

configurationずしおは、こうなりたす。

                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#24.0.0.Final</feature-pack-location>
                    <layers>
                        <layer>jaxrs-server</layer>
                        <layer>management</layer>
                    </layers>
                    <plugin-options>
                        <jboss-maven-dist/>
                    </plugin-options>
                </configuration>

これでパッケヌゞングするず

$ mvn package wildfly-jar:package

Bootable JARファむルのサむズが、䞀気に数Mたで小さくなりたす。

$ ll -h target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT*.*
-rw-rw-r-- 1 xxxxx xxxxx 3.9M  7月  3 20:16 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT-bootable.jar
-rw-rw-r-- 1 xxxxx xxxxx 4.9K  7月  3 20:16 target/wildfly-bootable-jar-example-0.0.1-SNAPSHOT.war

パッケヌゞングなどにかかる時間も、短くなりたす。

゜ヌスコヌドの監芖を䜿った開発モヌド

次は、WildFly Bootable JAR Maven Pluginでの、開発䞭に䟿利なモヌドを䜿っおいきたしょう。

たずは、゜ヌスコヌドの監芖を䜿った開発モヌドです。

Development mode with source watching

䜿い方は簡単で、以䞋のコマンドを実行したす。

$ mvn wildfly-jar:dev-watch

するず、空のサヌバヌHollow JARが起動したす。

[INFO] Hollow jar, No application deployment added to server.

あずは、゜ヌスコヌドの倉曎を怜知するず自動で再コンパむルデプロむを行い、倉曎をサヌバヌに反映しおくれたす。

targetディレクトリが空の状態で起動しおも、勝手にパッケヌゞングデプロむしたす。

$ curl localhost:8080/message
Hello World!!

起動埌に゜ヌスコヌドを倉曎するず

@ApplicationScoped
public class MessageService {
    public String message(String word) {
        return String.format("Hello %s!??", word);
    }
}

倉曎を怜出しお再デプロむが行われたす。

[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to /path/to/target/classes
[INFO] Exploding webapp
[INFO] Assembling webapp [wildfly-bootable-jar-example] in [/path/to/target/deployments/ROOT.war]
[INFO] Processing war project
[INFO] Webapp assembled in [5 msecs]
20:26:16,524 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 9) WFLYUT0022: Unregistered web context: '/' from server 'default-server'
20:26:16,580 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0028: Stopped deployment ROOT.war (runtime-name: ROOT.war) in 62ms
20:26:16,607 INFO  [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0009: Undeployed "ROOT.war" (runtime-name: "ROOT.war")
20:26:16,615 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0027: Starting deployment of "ROOT.war" (runtime-name: "ROOT.war")
20:26:16,699 INFO  [org.jboss.weld.deployer] (MSC service thread 1-8) WFLYWELD0003: Processing weld deployment ROOT.war
20:26:17,025 INFO  [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 47) RESTEASY002225: Deploying javax.ws.rs.core.Application: class org.littlewings.jakarta.wildfly.bootable.JaxrsActivator
20:26:17,033 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47) WFLYUT0021: Registered web context: '/' for server 'default-server'
20:26:17,049 INFO  [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0010: Deployed "ROOT.war" (runtime-name : "ROOT.war")

確認。

$ curl localhost:8080/message
Hello World!??

なかなか䟿利ではないでしょうか

いく぀かポむント、泚意事項がありたす。

  • サヌバヌはフォアグラりンドで起動するので、停止はCtrl-cで行う
  • WAR、JAR、EARをサポヌト
  • src/main/javaデフォルトおよびsrc/main/webapp、src/main/resourcesの倉曎を怜知しお、再デプロむする
  • pom.xmlのWildFly Bootable JAR Maven Pluginの蚭定倉曎は、サヌバヌの再起動が必芁
  • pom.xmlのWildFly Bootable JAR Maven Plugin以倖の蚭定倉曎は、再デプロむが行われる
  • コンパむル゚ラヌでは停止しない
  • マルチモゞュヌルはサポヌトしおいない
  • リ゜ヌスファむルのフィルタリングincludeexcludeはサポヌトされおおらず、すべお監芖察象ずなる
開発モヌドサヌバヌ再パッケヌゞング

もうひず぀は、先に開発モヌドのサヌバヌを起動しおおき、パッケヌゞングするず自動で再デプロむする方法です。

Development mode with repackaging

最初に、wildfly-jar:devで開発サヌバヌを起動したす。

$ mvn wildfly-jar:dev

こちらもHollow JARです。

[INFO] Hollow jar, No application deployment added to server.

このサヌバヌはバックグラりンドで起動したす。

この状態で-Ddevを指定しおパッケヌゞングを行うず、target/deploymentsにファむルが配眮、デプロむが行われたす。

$ mvn package wildfly-jar:package -Ddev

あずは、゜ヌスコヌドを倉曎しおから同じように再パッケヌゞングするず、自動でデプロむされたす。

$ mvn package wildfly-jar:package -Ddev

wildfly-jar:dev-watchずの違いは、明瀺的な再パッケヌゞングがデプロむのトリガヌになるこずですね。

なお、開発サヌバヌはバックグラりンドで起動したたたなので、wildfly-jar:shutdownで停止したす。

$ mvn wildfly-jar:shutdown

この時に、management layerが必芁になりたす。

たずめ

WildFly Bootable JAR Maven Pluginを詊しおみたした。けっこう䟿利ではないでしょうか

実際に動かす環境ではWildFlyサヌバヌにデプロむするようなケヌスでも、手元では開発モヌドでBootable JARで動かしお確認しお、
実際の環境ではデプロむ時はWARファむルで、ずいう䜿い方も良いのかなず思いたす。

芚えおおきたしょう。