使用方法

プラグインは、Spring Boot アプリケーションで動作するためのいくつかのゴールを提供します。

  • repackage: 自動実行可能な jar または war ファイルを作成します。通常のアーティファクトを置き換えるか、別個の分類子を使用してビルドライフサイクルにアタッチできます。
  • run: Spring Boot アプリケーションをいくつかのオプションで実行して、パラメーターを渡します。
  • start および stop: Spring Boot アプリケーションを integration-test フェーズに統合して、アプリケーションがその前に開始されるようにします。
  • build-info: アクチュエーターで使用できるビルド情報を生成します。

各ゴールについて、以下でさらに説明します。

アプリケーションの再パッケージ化

アプリケーションを再パッケージ化するには、pom.xml のプラグインへの参照を追加するだけです。

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.5.RELEASE</version>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

上記の例では、jar または war を再パッケージします。これは、プロジェクトで定義されている provided 依存関係を含め、Maven ライフサイクルのパッケージフェーズでビルドされます。これらの依存関係の一部を除外する必要がある場合は、除外オプションのいずれかを使用できます。詳細については、依存関係を除外するを参照してください。maven-war-pluginoutputFileNameMapping 機能は現在サポートされていないことに注意してください。

Devtools はデフォルトで自動的に除外されます(excludeDevtools プロパティを使用して制御できます)。これを war パッケージで機能させるには、spring-boot-devtools 依存関係を optional または provided スコープに設定する必要があります。

元の(実行不可能な)アーティファクトはデフォルトで .original に名前が変更されますが、カスタム分類子を使用して元のアーティファクトを保持することもできます。

プラグインはマニフェストを書き換え、特に Main-Class および Start-Class エントリを管理します。デフォルトが機能しない場合は、そこに構成する必要があります(jar プラグインではありません)。マニフェストのメインクラスは、実際にはブートプラグインのレイアウトプロパティによって制御されます。たとえば

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.5.RELEASE</version>
      <configuration>
        <mainClass>${start-class}</mainClass>
        <layout>ZIP</layout>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

layout プロパティのデフォルトは、アーカイブタイプ(jar または war)に基づいた推測になります。次のレイアウトが利用可能です。

  • JAR: 通常の実行可能 JAR レイアウト。
  • WAR: 実行可能な WAR レイアウト。provided 依存関係は、war がサーブレットコンテナーにデプロイされたときの衝突を避けるために WEB-INF/lib-provided に配置されます。
  • ZIP(別名 DIR):PropertiesLauncher を使用した JAR レイアウトに似ています。
  • NONE: すべての依存関係とプロジェクトリソースをバンドルします。ブートストラップローダーをバンドルしません。

このゴールを構成する方法のより詳細な例については、以下を参照してください。

アプリケーションの実行

プラグインには、コマンドラインからアプリケーションを起動するために使用できる実行ゴールが含まれています。

mvn spring-boot:run

デフォルトでは、アプリケーションは分岐したプロセスで実行され、コマンドラインでプロパティを設定してもアプリケーションには影響しません。いくつかの JVM 引数を指定する必要がある場合(つまり、デバッグ目的で)、jvmArguments パラメーターを使用できます。詳細については、アプリケーションをデバッグするを参照してください。システムプロパティと環境変数の明示的なサポートもあります。

プロファイルの有効化は非常に一般的であるため、-Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev" のショートカットを提供する専用の profiles プロパティがあります(アクティブなプロファイルを指定するを参照)。

これは推奨されませんが、fork プロパティを無効にすることにより、Maven JVM からアプリケーションを直接実行することができます。そうすることは、jvmArgumentssystemPropertyVariablesenvironmentVariables および agents オプションが無視されることを意味します。

Spring Boot 1.3 は devtools を導入しました。これは、Spring Boot アプリケーションで作業するときの開発時のエクスペリエンスを向上させるモジュールです。これを有効にするには、次の依存関係をプロジェクトに追加します。

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.2.5.RELEASE</version>
    <optional>true</optional>
  </dependency>
</dependencies>

devtools が実行中の場合、アプリケーションを再コンパイルすると変更が検出され、自動的にリフレッシュされます。これはリソースだけでなくコードでも機能します。また、LiveReload サーバーも提供するため、状況が変化するたびにブラウザーのリフレッシュを自動的にトリガーできます。

Devtools は、静的リソースが変更された場合にのみブラウザをリフレッシュするように構成することもできます(コードの変更は無視します)。プロジェクトに次のプロパティを含めるだけです。

spring.devtools.remote.restart.enabled=false

devtools より前は、プラグインはデフォルトでリソースのホットリフレッシュをサポートしていましたが、上記のソリューションを優先して無効になりました。プロジェクトを構成することにより、いつでも復元できます。

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.5.RELEASE</version>
      <configuration>
        <addResources>true</addResources>
      </configuration>
    </plugin>
    ...
  </plugins>
  ...
</build>

addResources が有効な場合、アプリケーションを実行すると、src/main/resources フォルダーがアプリケーションクラスパスに追加され、 ターゲット / クラスで見つかった重複は削除されます。これにより、Web アプリケーションの開発時に非常に役立つリソースのホットリフレッシュが可能になります。例:HTML、CSS、または JavaScript ファイルを操作して、アプリケーションを再コンパイルせずにすぐに変更を確認できます。また、フロントエンド開発者が Java IDE をダウンロードしてインストールしなくても作業できるようにする便利なメソッドです。

この機能を使用する副作用は、ビルド時にリソースのフィルタリングが機能しないことに注意してください。

repackage のゴールと一致するために、run のゴールは、プラグインの構成で除外されている依存関係もクラスパスから除外されるようにクラスパスを作成します。詳細については、依存関係を除外するを参照してください。

アプリケーションの実行時にテストの依存関係を含めると便利な場合があります。例:スタブクラスを使用するテストモードでアプリケーションを実行する場合。これを行う場合は、useTestClasspath パラメーターを true に設定できます。これは、アプリケーションの実行時にのみ適用されることに注意してください。repackage のゴールは、結果の JAR/WAR にテストの依存関係を追加しません。

統合テストの使用

Spring Boot アプリケーションはテスト(またはテストスイート)自体から非常に簡単に起動できますが、ビルド自体で処理することが望ましい場合があります。統合テストで Spring Boot アプリケーションのライフサイクルが適切に管理さていることを確認するには、以下で説明するように start および stop ゴールを使用できます。

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.5.RELEASE</version>
      <executions>
        <execution>
          <id>pre-integration-test</id>
          <goals>
            <goal>start</goal>
          </goals>
        </execution>
        <execution>
          <id>post-integration-test</id>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

このようなセットアップでは、フェイルセーフプラグイン (Apache) を使用して、期待どおりに統合テストを実行できます。

特定のプロパティが設定されたときに統合テストをスキップするように、より高度なセットアップを構成することもできます。

<properties>
  <it.skip>false</it.skip>
</properties>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-failsafe-plugin</artifactId>
      <configuration>
        <skip>${it.skip}</skip>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.5.RELEASE</version>
      <executions>
        <execution>
          <id>pre-integration-test</id>
          <goals>
            <goal>start</goal>
          </goals>
          <configuration>
            <skip>${it.skip}</skip>
          </configuration>
        </execution>
        <execution>
          <id>post-integration-test</id>
          <goals>
            <goal>stop</goal>
          </goals>
          <configuration>
            <skip>${it.skip}</skip>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

mvn verify -Dit.skip=true を実行すると、統合テストは完全にスキップされます。

このゴールを構成する方法のより詳細な例については、以下を参照してください。


Unofficial Translation by spring.pleiades.io. See the original content.