はじめに
前回、SpringMVCでHelloWorldのREST APIを作成したので
これを実行可能なwarにアーカイブし、実際に実行してみるところまでやってみる。
環境
ソフトウェア | バージョン |
---|---|
OS | Windows10 Pro |
Java | JDK12 |
Eclipse | 2020-12 M1 |
SpringBoot | 2.4.0 |
Spring Tool Suite (STS) | 4.8.1 |
実施
0. 前回作成したHelloWorld REST API アプリ
@RestController
public class HelloController {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
@RequestMapping("/sb")
public String helloSp() {
return "Hello SpringBoot!";
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloSpringApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSpringApplication.class, args);
}
}
warを起動してここのエンドポイントにアクセスするのがゴール。
1. Gradleにwarプラグインを追加、bootWarタスク実行
実行可能なwarを作るにはgradleにwarプラグインを追加すればいい。
ついでに生成されるwarファイル名を指定する。
bootWarタスク
にarchiveName
で指定できる。
plugins {
id 'org.springframework.boot' version '2.4.0'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
id 'eclipse'
id 'war' //★ここを追加★
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '12'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
// ★warファイル名を指定★
bootWar {
archiveName 'HelloSpringApp.war'
}
warプラグインを追加してgradle tasks
でタスクを確認すると
bootWar
が追加されるのでそれを実行。
M:\develop\repository\git\practice2\HelloSpring>gradle bootWar
BUILD SUCCESSFUL in 41s
4 actionable tasks: 4 executed
成功すればプロジェクトのbuild/libs
配下にwarファイルが生成される。
2. warファイルの起動
作成したwarファイルをjava -jar {warファイル名}
で起動できる。
M:\develop\repository\git\practice2\HelloSpring\build\libs>java -jar HelloSpringApp.war
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0)
2020-11-25 23:19:40.149 INFO 13388 --- [ main] com.example.demo.HelloSpringApplication : Starting HelloSpringApplication using Java 12.0.2 on xxxxx with PID 13388 (M:\develop\repository\git\practice2\HelloSpring\build\libs\HelloSpringApp.war started by xxxx in M:\develop\repository\git\practice2\HelloSpring\build\libs)
2020-11-25 23:19:40.151 INFO 13388 --- [ main] com.example.demo.HelloSpringApplication : No active profile set, falling back to default profiles: default
2020-11-25 23:19:41.212 INFO 13388 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2020-11-25 23:19:41.223 INFO 13388 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-11-25 23:19:41.223 INFO 13388 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
2020-11-25 23:19:41.684 INFO 13388 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-11-25 23:19:41.685 INFO 13388 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1489 ms
2020-11-25 23:19:41.829 INFO 13388 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-11-25 23:19:41.968 INFO 13388 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-11-25 23:19:41.976 INFO 13388 --- [ main] com.example.demo.HelloSpringApplication : Started HelloSpringApplication in 2.181 seconds (JVM running for 2.504)
この状態で以下にアクセスしてみる。
やったぜ。
tomcatを内包してるのでこのwarアーカイブをそこらへんのサーバにデプロイすれば
そのままWebアプリとして公開できる。
(こんな単純なアプリは無いだろうけど)
mainクラスを指定するmanifestはgradleに書かなかったけど
よしなに@SpringBootApplication
のクラスを探してくれるっぽい?
まとめ
とりあえずアーカイブ化の方法は取得完了。
後々のCI/CDのCD部分で役に立つ・・・といいなぁ。