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

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配下に配置されます。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント