使用Gradle建立一個最簡單的Spring Boot專案
很多剛開始用Gradle的不能執行是因為依賴下載失敗,請先看著篇文章: Gradle編譯時下載依賴失敗解決方法
- 最近在學習 Spring Boot ,但是由於沒有科學上網,導致使用 Gradle 開發時編譯特別慢並且經常出錯,遇到很多問題,看了很多部落格都寫的非常零碎和混亂,今天在公司看了一天的官方文件才算是剛剛入門,所以記錄一下,希望能對初學者能有所幫助
開發工具及環境
- JDK 1.7+
- Spring Boot 要求 JDK 不低於1.6,推薦使用1.8
- 編譯工具 Gradle
- 安裝可以參考我之前寫的部落格(Gradle環境搭建),或其他很多教程都可以找到
- 開發工具建議使用IDEA或者 STS(Spring Tool Suite)
- 因為整合度比較高,不需要再單獨下載外掛,如果使用 Eclipse 或 MyEclipse 需要單獨下載 Gradle 和 Spring 外掛,並且沒有科學上網很容易失敗,在這裡我們使用 IDEA 作為開發工具
Spring Boot 是什麼
- Spring Boot 是 Spring 社群釋出的一個開源專案,旨在幫助開發者快速並且更簡單的構建專案。大多數 Spring Boot 專案只需要很少的配置檔案。
Spring Boot 特性
- 建立獨立的 Spring 專案
- 內建 Tomcat 和 Jetty 容器
- 提供一個 starter POMs 來簡化 Maven 配置
- 提供了一系列大型專案中常見的非功能性特性,如安全、指標,健康檢測、外部配置等
- 完全沒有程式碼生成和 xml 配置檔案
Spring Boot 應用快速搭建官方文件
1. 建立一個 Gradle 專案,填入所需要的資訊
2. 建立相應的目錄
因為 Spring Boot 使用 Gradle 編譯,所以有固定的檔案結構
目錄結構
─src
build.gradle
├─main
│ ├─java
│ │ SpringController.java
│ │
│ └─resources
└─test
├─java
└─resources
3. 建立一個 Controller 類(在 main 資料夾下)
- SpringController.java
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
//表明這是一個 Controller
@Controller
//RestController是一種Rest風格的Controller,可以直接返回物件而不返回檢視,返回的物件可以使JSON,XML等
//@RestController
//使用自動配置,主動新增並解析bean,配置檔案等資訊
@EnableAutoConfiguration
public class SpringController {
//設定訪問的url
@RequestMapping("/")
//表示返回JSON格式的結果,如果前面使用的是@RestController可以不用寫
@ResponseBody
String home() {
return "Hello World!";//返回結果為字串
}
public static void main(String[] args) throws Exception {
//通過SpringApplication的run()方法啟動應用,無需額外的配置其他的檔案
SpringApplication.run(SpringController.class, args);
}
}
4. 修改 build.gradle 檔案
- build.gradle
- 預設生成的 Gradle 檔案並不能滿足編譯 Spring Boot 應用,需要手動修改
buildscript {
repositories {
mavenCentral()//依賴Maven倉庫
}
dependencies {
//使用1.4.2.RELEASE版本的Spring框架
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
//生成的jar包包名和版本
jar {
baseName = 'gs-rest-service'
version = '0.1.0'
}
repositories {
mavenCentral()
}
//設定jdk的版本
sourceCompatibility = 1.8
targetCompatibility = 1.8
//新增編譯時的依賴
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
5. 編譯專案
- 在命令列進入到該專案根目錄下,輸入 gradle build 進行編譯
編譯的過程中會下載很多的jar包,如果沒有科學上網可能會很慢
編譯成功後輸出
build successful
D:\WorkSpace\IntelliJIDEA\springboot>gradle build
The plugin id 'spring-boot' is deprecated. Please use 'org.springframework.boot' instead.
:compileJava
:processResources UP-TO-DATE
:classes
:findMainClass
:jar
:bootRepackage
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build
BUILD SUCCESSFUL
Total time: 5.807 secs
- 也可以在左側的 gradle 中點選重新整理按鈕,效果是一樣的
6. 啟動專案
- 在命令列中輸入
gradle bootrun
進行啟動專案 - 也可以使用左側的 gradle 中 Task 下的 application 中的 bootRun 按鈕啟動(參照上圖)
預設的會啟動 tomcat,使用8080埠,如果埠被佔用會報錯
啟動成功後會輸出以下內容
D:\WorkSpace\IntelliJIDEA\springboot>gradle bootrun
The plugin id 'spring-boot' is deprecated. Please use 'org.springframework.boot' instead.
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.2.RELEASE)
2016-11-30 22:14:47.878 INFO 9120 --- [ main] SpringController : Starting SpringController on H with PID 9120 (D:\WorkSpace\Intel
liJIDEA\springboot\build\classes\main started by 50185 in D:\WorkSpace\IntelliJIDEA\springboot)
2016-11-30 22:14:47.880 INFO 9120 --- [ main] SpringController : No active profile set, falling back to default profiles: default
2016-11-30 22:14:47.911 INFO 9120 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationC
onfigEmbeddedWebApplicationContext@57c758ac: startup date [Wed Nov 30 22:14:47 CST 2016]; root of context hierarchy
2016-11-30 22:14:49.330 INFO 9120 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-11-30 22:14:49.343 INFO 9120 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2016-11-30 22:14:49.344 INFO 9120 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.6
2016-11-30 22:14:49.457 INFO 9120 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2016-11-30 22:14:49.458 INFO 9120 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1550 ms
2016-11-30 22:14:49.642 INFO 9120 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2016-11-30 22:14:49.647 INFO 9120 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-11-30 22:14:49.648 INFO 9120 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-11-30 22:14:49.648 INFO 9120 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-11-30 22:14:49.648 INFO 9120 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2016-11-30 22:14:49.941 INFO 9120 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.
embedded.AnnotationConfigEmbeddedWebApplicationContext@57c758ac: startup date [Wed Nov 30 22:14:47 CST 2016]; root of context hierarchy
2016-11-30 22:14:50.022 INFO 9120 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String SpringController.home()
2016-11-30 22:14:50.026 INFO 9120 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.Respons
eEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletReque
st)
2016-11-30 22:14:50.026 INFO 9120 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springf
ramework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http
.HttpServletResponse)
2016-11-30 22:14:50.050 INFO 9120 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.sp
ringframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-11-30 22:14:50.050 INFO 9120 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springfram
ework.web.servlet.resource.ResourceHttpRequestHandler]
2016-11-30 22:14:50.088 INFO 9120 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class or
g.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-11-30 22:14:50.209 INFO 9120 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2016-11-30 22:14:50.263 INFO 9120 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-11-30 22:14:50.267 INFO 9120 --- [ main] SpringController : Started SpringController in 2.734 seconds (JVM running for 3.049
)
2016-11-30 22:14:57.820 INFO 9120 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-11-30 22:14:57.820 INFO 9120 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2016-11-30 22:14:57.836 INFO 9120 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed i
n 16 ms
> Building 80% > :bootRun
7. 通過瀏覽器訪問該專案
- 該專案因為配置的路徑為根路徑,所以直接訪問
localhost:8080
即可 - 如果想停止執行該專案可以在命令列中按
Ctrl+C
,輸入Y
即可停止
- 至此,一個最簡單的 Spring Boot 專案建立完成,想要學習更多的知識可以訪問官方的文件
- 如果遇到 IDEA 中的 Controller 提示沒有引入包無法進行程式碼提示可以點選 Gradle 的重新整理按鈕,等待編譯完成就可以進行後續操作了
原始碼下載
操作步驟記錄
相關文章
- Spring Boot—— Thymeleaf (gradle) 的簡單使用Spring BootGradle
- 使用gradle搭建spring boot專案GradleSpring Boot
- 使用gradle管理spring-boot專案GradleSpringboot
- 使用Gradle構建Spring boot專案GradleSpring Boot
- 快速建立你的第一個Spring Boot專案Spring Boot
- 構建第一個基於 Gradle 的 Spring Boot 專案GradleSpring Boot
- Gradle入門:建立 Spring Boot Web 應用專案GradleSpring BootWeb
- Spring Boot 之路(一):一個簡單的Spring Boot應用Spring Boot
- springboot gradle demo (使用 Gradle 構建的 Spring Boot專案)Spring BootGradle
- Spring Boot專案建立Spring Boot
- 用gradle搭建spring boot專案GradleSpring Boot
- Spring Boot入門(一):使用IDEA建立Spring Boot專案並使用yaml配置檔案Spring BootIdeaYAML
- 一個簡單的spring-boot例子Springboot
- 手把手教你手寫一個最簡單的 Spring Boot StarterSpring Boot
- Gradle快速構建Spring Boot專案GradleSpring Boot
- Spring Boot實際專案用簡單的AOPSpring Boot
- 一個簡單的Gradle指令碼檔案Gradle指令碼
- Spring Boot——初體驗開啟第一個Gradle構建的Web專案Spring BootGradleWeb
- 微服務架構專案實戰:Spring Boot 如何建立簡單的 REST 服務微服務架構Spring BootREST
- 最簡單的dockerfile使用教程 - 建立一個支援SSL的Nginx映象DockerNginx
- 使用IDEA建立gradle專案IdeaGradle
- spring boot 建立web專案(IDEA)Spring BootWebIdea
- idea建立spring boot專案慢()IdeaSpring Boot
- 如何把Spring Boot 專案變成一個XML配置的Spring專案Spring BootXML
- 一個最簡單的XML檔案(轉)XML
- 怎樣使用Spring Boot專案的單元測試Spring Boot
- 怎樣使用Spring Boot專案的單元測試?Spring Boot
- 使用 SAP BTP 建立一個 Spring Boot Java 應用Spring BootJava
- Idea下構建基於Gradle的Spring Boot專案IdeaGradleSpring Boot
- SAP Cloud Platform integration上建立一個最簡單的iFlowCloudPlatform
- Spring Boot入門(一):搭建Spring Boot專案Spring Boot
- 基於Idea從零搭建一個最簡單的vue專案IdeaVue
- _004_SpringBoot_使用eclipse工具搭建一個簡單的Spring bootSpring BootEclipse
- 最簡單的物件建立物件
- Spring Boot 最簡單整合 Shiro+JWT 方式Spring BootJWT
- 建立一個簡單的初級SpringMVC專案(非註解版)SpringMVC
- 使用 Docker 部署 Spring Boot 專案DockerSpring Boot
- 使用Docker部署Spring Boot專案DockerSpring Boot