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>