Jetty Maven プラグインで、ホットデプロイを有効にして Webアプリを起動する方法を書いていきます。
バージョン
ブログ執筆時の製品バージョンは以下の通りです。
1. プラグインの追加
pom.xml に、以下のプラグインを追加します。
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>11.0.12</version>
<configuration>
<scan>1</scan>
</configuration>
</plugin>
</plugins>
</build>
</project>
scan を 1 にすると、1秒ごとに資源の変更をチェックするようになります。資源の変更がある場合は、自動で再配備をしてくれます。
2. Webアプリの起動
以下のコマンドを実行します。
mvn jetty:run
サーブレットコンテナが起動すると、以下のログが出力されます。
[INFO] Started ServerConnector@66c9b52f{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
[INFO] Started Server@59ce792e{STARTING}[11.0.12,sto=0] @3620ms
[INFO] Scan interval sec = 1
Ctrl+C を押すと停止します。
手動で再配備する方法
手動で再配備したい場合は、プラグインの scan を 0 に設定します。
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>11.0.12</version>
<configuration>
<scan>0</scan>
</configuration>
</plugin>
mvn jetty:run を実行すると、以下のメッセージが出力されます。
[INFO] Started ServerConnector@4f379769{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
[INFO] Started Server@7c2dfa2{STARTING}[11.0.12,sto=0] @4055ms
Hit <enter> to redeploy:
Enter を押すと、資源が再配備されます。
再配備を無効にする方法
以下のいずれかの方法で、再配備を無効にできます。
scanを設定しないscanを-1に設定する(デフォルト値)
ビルドファイルの例
Servlet API と Warプラグインを含めたビルドファイルを掲載しておきます。
pom.xml
<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.sample</groupId>
<artifactId>sample-jetty-plugin</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>11.0.12</version>
<configuration>
<scan>1</scan>
</configuration>
</plugin>
</plugins>
</build>
</project>