使用方法

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

  • repackage : 自動実行可能なjarまたはwarファイルを作成します。通常のアーティファクトを置き換えるか、別個の分類子を使用してビルドライフサイクルにアタッチできます。
  • run : Spring Bootアプリケーションをいくつかのオプションで実行して、パラメーターを渡します。
  • start および stop: integrate your Spring Boot application to the integration-test phase so that the application starts before it.
  • build-info : アクチュエーターで使用できるビルド情報を生成します。

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

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

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

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.4.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.4.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 (alias to DIR ): similar to the JAR layout using PropertiesLauncher .
  • NONE : すべての依存関係とプロジェクトリソースをバンドルします。ブートストラップローダーをバンドルしません。

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

アプリケーションの実行

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

mvn spring-boot:run

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

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

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

Spring Boot 1.3は、Spring Bootアプリケーションでの作業時の開発時のエクスペリエンスを改善するモジュールである devtoolsを導入しました。有効にするには、次の依存関係をプロジェクトに追加するだけです:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.2.4.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.4.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.4.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.4.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.