「Gradle」Spring Bootアプリケーションをビルドしてみる
前々から使ってみたいと思っていた Spring Boot やっと触りました。 今回は Gradle 使って簡単なアプリケーションをビルドするところまでをやります。
下記のガイドに従って進めました。(ほぼそのままの内容・・・)
・Building Spring Boot 2 Applications with Gradle
1. Java プロジェクトの作成
まずは、Gradle で Java プロジェクトを作成します。gradle init で type に java-application を指定して作成します。
C:\> mkdir C:\devspace\gradle\project\spring-boot-test C:\> cd C:\devspace\gradle\project\spring-boot-test C:\devspace\gradle\project\spring-boot-test> gradle init --type java-application C:\devspace\gradle\project\spring-boot-test> dir ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は 0659-09F6 です C:\devspace\gradle\project\spring-boot-test のディレクトリ 2018/12/01 11:00 <DIR> . 2018/12/01 11:00 <DIR> .. 2018/12/01 10:48 1,298 .classpath 2018/12/01 10:42 108 .gitignore 2018/12/01 10:46 <DIR> .gradle 2018/12/01 10:48 640 .project 2018/12/01 10:48 <DIR> .settings 2018/12/01 10:48 <DIR> bin 2018/12/01 11:01 <DIR> build 2018/12/01 11:00 1,261 build.gradle 2018/12/01 10:42 <DIR> gradle 2018/12/01 10:42 5,305 gradlew 2018/12/01 10:42 2,269 gradlew.bat 2018/12/01 10:46 419 settings.gradle 2018/12/01 10:42 <DIR> src
2. build.gradle などの設定を編集
ガイドに従って build.gradle などの設定ファイルを編集します。
・build.gradle
plugins { id 'java' id 'application' id 'com.gradle.build-scan' version '1.16' id 'org.springframework.boot' version '2.0.5.RELEASE' } apply plugin: 'io.spring.dependency-management' repositories { jcenter() } dependencies { implementation 'org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'junit:junit:4.12' testImplementation 'org.springframework.boot:spring-boot-starter-test' components { withModule('org.springframework:spring-beans') { allVariants { withDependencyConstraints { it.findAll { it.name == 'snakeyaml' }.each { it.version { strictly '1.19' } } } } } } } mainClassName = 'spring.boot.test.App' bootJar { mainClassName = 'spring.boot.test.App' }
・setting.gradle
rootProject.name = 'spring-boot-test' enableFeaturePreview('IMPROVED_POM_SUPPORT')
3. Spring Boot アプリケーションの作成
プロジェクト作成時に生成された App.java などを Spring Boot アプリケーションに書き換えます。
・App.java
package spring.boot.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
・HelloGradleController.java
package spring.boot.test; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController("/") public class HelloGradleController { @GetMapping public String helloGradleGet() { return "[GET] Hello Gradle!"; } @PostMapping public String helloGradlePost() { return "[POST] Hello Gradle!"; } }
/ に対して GET リクエストが来たら helloGradleGet、POST リクエストが来たら helloGradlePost が呼び出されるコントローラにしてみました。
テストコードも修正しておきます。
・AppTest.java
package spring.boot.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import javax.swing.text.AbstractDocument.Content; @RunWith(SpringRunner.class) @SpringBootTest(classes = App.class) @AutoConfigureMockMvc public class AppTest { @Autowired private MockMvc mvc; @Test public void helloGradleGet() throws Exception { mvc.perform(get("/")) .andExpect(status().isOk()) .andExpect(content().string("[GET] Hello Gradle!")); } @Test public void helloGradlePost() throws Exception { mvc.perform(post("/")) .andExpect(status().isOk()) .andExpect(content().string("[POST] Hello Gradle!")); } }
4. ビルド、アプリケーションの実行
gradlew bootJar、gradlew bootRun でビルド、実行します。
C:\devspace\gradle\project\spring-boot-test>.\gradlew bootJar C:\devspace\gradle\project\spring-boot-test>.\gradlew bootRun
http://localhost:8080 で起動してくるので、GET、POST でアクセスしてみます。
$ curl http://localhost:8080 [GET] Hello Gradle! $ curl http://localhost:8080 -X POST [POST Hello Gradle!
ちゃんと意図通りのメソッドが呼び出されました。
今回の動作確認は VS Code 上でやりましたが、さすがしんどいので次回は Eclipse プロジェクトを作成して Eclipse 上で作業できるようにしたいと思います。
以上です。
[環境情報]
Windows 10
Java SE 8 Update 152
Gradle 5.0
Spring Boot 2.0.5.RELEASE