LoginSignup
2
2

More than 3 years have passed since last update.

SpringBootことはじめ 2.gradleで実行可能なwarファイルを作る

Posted at

はじめに

前回、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 アプリ

HelloController.java
@RestController
public class HelloController {

    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

    @RequestMapping("/sb")
    public String helloSp() {
        return "Hello SpringBoot!";
    }

}
HelloSpringApplication.java
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で指定できる。

build.gradle
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が追加されるのでそれを実行。

image.png

bootWar実行
M:\develop\repository\git\practice2\HelloSpring>gradle bootWar

BUILD SUCCESSFUL in 41s
4 actionable tasks: 4 executed

成功すればプロジェクトのbuild/libs配下にwarファイルが生成される。

image.png

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)

この状態で以下にアクセスしてみる。

  • http://localhost:8080/
    image.png

  • http://localhost:8080/sb
    image.png

やったぜ。:vulcan:

tomcatを内包してるのでこのwarアーカイブをそこらへんのサーバにデプロイすれば
そのままWebアプリとして公開できる。
(こんな単純なアプリは無いだろうけど)

mainクラスを指定するmanifestはgradleに書かなかったけど
よしなに@SpringBootApplicationのクラスを探してくれるっぽい?

まとめ

とりあえずアーカイブ化の方法は取得完了。
後々のCI/CDのCD部分で役に立つ・・・といいなぁ。

参考

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2