Spring Boot + Gradleでwarファイルを作成する方法

Spring Boot + Gradleでwarファイルを作成する方法

STSのスタータープロジェクトで作成したプロジェクトはデフォルトでjarファイルを作成してくれますが、build.gradleとかいくつか修正することで、プロジェクト名\build\libs配下にwarファイルを作成することができます。

まず@SpringBootApplicationアノテーションのクラスはSpringBootServletInitializerを継承するようにします。configureメソッドを以下のようにオーバーライドします。

package jp.co.confrage;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class StsApplication extends SpringBootServletInitializer{ // 継承しておく

  public static void main(String[] args) {
    SpringApplication.run(StsApplication.class, args);
  }
  // ここから追加
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
   return application.sources(StsApplication.class);
  }
  // ここまで追加
}

次にbuild.gradleを修正します。

apply plugin: 'war'

上記を追加します。warファイルの名前を指定したい場合は以下のように書いて名前を指定します。

apply plugin: 'war'
  war {
    archiveName 'a.war'
  }

dependencies{}内に以下を追記しておく必要があります。

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

これでwarタスクを実行すればa.warファイルがlibs配下に作成されます。

スタータープロジェクトでwarを選択する

スタータープロジェクトでwarを選択するとデフォルトでServletInitializer.javaが作成されます。

package jp.co.confrage;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(WarApplication.class);
  }
}

またbuild.gradleからjarが消えてwarに変わっています。依存関係で以下1文が追加され、組込Tomcatがwar作成時には入らないようになっています。

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

別のTomcatにwarデプロイするときにmainメソッドは実行されずにconfigureメソッドが実行されるようになります。

warファイル名を指定したい場合は、bootWarで指定します。

標準プラグインのwarを使用すると、bootWarタスクを使用するようになっています。

bootWar {
  archiveName 'rename.war'
}
Spring Boot Gradle プラグインリファレンスガイド - ドキュメント
1. 導入Spring BootGradleプラグインは、Gradleで Spring Boot サポートを提供します。実行可能な jar または war アーカイブをパッケージ化し、Spring Boot アプリケーションを実行し、spr...

warファイル構成

warファイルのフォルダ構成でWEB-INF直下にxmlファイルなどを配置してwarファイルにしたい場合は、Gradleプロジェクトをsrc/main/webapp/WEB-INF/というフォルダ構成にして、WEB-INF配下にxmlファイルなどを配置します。

これで、warファイル作成すればWEB-INF直下にファイルが配置されます。

src/main/resource/配下に置いてあるapplication.ymlなどは、WEB-INF/classes配下に配置されます。

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました