Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

Jetty Maven Plugin ホットデプロイを有効にしてアプリを起動

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>

scan1 にすると、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 を押すと停止します。

手動で再配備する方法

手動で再配備したい場合は、プラグインscan0 に設定します。

<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>