創(chuàng)建一個Spring Boot工程
1.首先我們打開了IntelliJ IDEA Ultimate,并選擇Create New Project
2.在New Project的左邊欄選擇Spring Initializer
這個時候我們要把Project SDK設(shè)置為系統(tǒng)中安裝的JDK
選擇New...婴梧,而后選擇JDK
選擇系統(tǒng)中安裝的JDK目錄(你的電腦中安裝的可能不一樣,可能你在用Java11或者12搬男,這個沒有關(guān)系护蝶,選擇JDK目錄就好)
3.點擊OK之后,可以發(fā)現(xiàn)這個窗口變成了類似這樣迄埃,然后我們Next
4.進入到Spring Boot工程信息的設(shè)置
這一步非常關(guān)鍵妄迁,請仔細看寝蹈。最初我們看到的給出的例子是這樣的
- Group:因為Java,Kotlin和Scala等基于JVM的語言的源代碼是一個個Package組織起來的登淘。每一個Package在一個工程中肯定都是唯一的箫老。而Gradle(和Maven)作為一個全世界范圍內(nèi)通用的依賴管理系統(tǒng),它約定了所有的團隊以域名反寫作為包的前綴黔州,例如com.taobao耍鬓。因為域名在世界上是唯一的,這樣如果所有的團隊都以域名反寫作為包的前綴流妻,那么各個團隊所開發(fā)的代碼就不會引起沖突了牲蜀。你現(xiàn)在暫時未曾向Maven中央庫上傳自己的開源代碼,所以你可能不知道向Maven中央庫上傳代碼是強制要求使用域名反寫作為所有包的前綴的绅这。如果不開源自己的項目涣达,那么這個GroupID并不是強制的,但是我十分建議你遵循這樣一個以域名反寫作為Group的前綴的約定证薇。
- Artifact:這個相當(dāng)于項目名稱度苔,根據(jù)你們自己的項目自行決定。
- Type:請你選擇Gradle Project
- Language:工程的編程語言浑度。因為你現(xiàn)在不會Kotlin寇窑,所以請選擇Java
- Packaging:用于指定項目部署的時候的打包形式,現(xiàn)在在你不知所以然的時候箩张,請選擇Jar
- Java Version:用于指定編譯生成的.class字節(jié)碼所支持的最低Java版本甩骏,為了最大兼容性考慮窗市,請選擇8
- Version:是當(dāng)前工程的版本,可以遵循慣例的“三段式”——主版本.次要版本.小版本饮笛。主版本用于發(fā)布整個項目的重大更新咨察,例如Tensorflow2的發(fā)布,Python 3的發(fā)布缎浇。次要版本用于發(fā)布新特性扎拣。小版本一般用于修復(fù)Bug。但是版本號的規(guī)范各個團隊都有自己的約定素跺,請自行決定。不是那么重要誉券。
- Name:指的是Spring Initializer所產(chǎn)生的Spring Boot啟動類的類名前綴指厌,默認是跟隨Artifact的命名。
- Description無意義踊跟,可以隨意
-
Package:是Spring Boot啟動類所在的包踩验。我們可以看到是默認是用Group + Artifact,這一項不建議改變商玫。
根據(jù)上面所介紹的各項配置箕憾,我們來填寫今天這樣一個工程的信息。
- Group:com.xxcore.code.jvm.spring
因為我有一個域名是xxcore.com拳昌,然后我現(xiàn)在就用com.xxcore作為我的包名的前綴袭异,后面的code.jvm.spring是我自己對代碼的分類,這個不重要炬藤,你可以根據(jù)自己的情況和團隊的約定御铃。但是我強烈建議你一定要用域名反寫作為前綴,如果你沒有域名沈矿,可以用Github上真,比如我的Github賬號是BriskCore,那么groupID就可以用io.github.briskcore.code………… - Artifact:api
在這里項目名稱選擇了api
因為我估計我和你都是想構(gòu)建一個RESTful api服務(wù)羹膳。你們團隊可以用項目名稱作為Artifact - Type:請你選擇Gradle Project
- Language:工程的編程語言睡互。因為你現(xiàn)在不會Kotlin,所以請選擇Java
- Packaging:用于指定項目部署的時候的打包形式陵像,現(xiàn)在在你不知所以然的時候就珠,請選擇Jar
- Java Version:用于指定編譯生成的.class字節(jié)碼所支持的最低Java版本,為了最大兼容性考慮蠢壹,請選擇8
- Version:在這里我用了2019.7.1-SNAPSHOT嗓违,這個不重要,在工程中還可以修改图贸。所以請你隨意蹂季。
-
Name冕广,Description,Package偿洁,都用自動生成的撒汉,建議不要修改。
然后我們點擊next
5.進入Spring Boot依賴設(shè)置頁面
這一步也請你跟著我做
我們首先在右上角版本選擇處下拉涕滋,選擇版本睬辐。可以選擇正式發(fā)布版,例如現(xiàn)在的2.1.6宾肺,以后可能會有2.2.x溯饵。也可以選擇“里程碑”版本,就是命名中帶有M的锨用。但是不建議選擇預(yù)覽版(SNAPSHOT)丰刊。現(xiàn)在我們選擇2.2.0 M4
請勾選如下依賴項
-
Developer Tools下的Spring Boot DevTools
-
Web下的如下三項
- 因為我們至少要用到MySQL,所以請選擇SQL下面的如下三項
確保都選好之后就可以點擊Next了
6.工程目錄選擇
ProjectName:是IntelliJ IDEA的項目名稱增拥,請與Artifact一致
Project location是你的工程在本地磁盤中存放的位置啄巧,你不用和我一樣選擇同樣的目錄,但是最后一個子目錄請一定是Artifact和ProjectName掌栅,例如我這里的D:\IdeaProjects\api最后一個子目錄名稱就是我們的Artifact和ProjectName——api
然后我們就可以點擊Finish秩仆。可能彈出這樣一個對話框猾封,這個是詢問你該工程目錄現(xiàn)在不存在澄耍,它會被IDEA新建的提示。你可能沒有這樣一個對話框忘衍,那一般也是正常的逾苫。
7.在主界面里關(guān)于Gradle相關(guān)設(shè)置
IDEA會自動彈出這樣的設(shè)置窗口
這個是IDEA用來導(dǎo)入Gradle工程的,請勾選Use auto-import
這樣IDEA就會自動監(jiān)視配置文件
build.grade
的改變枚钓,自動更新而后我們選擇OK铅搓,IDEA就會從互聯(lián)網(wǎng)上下載必要的依賴,這是一個比較慢的事情
上圖便是正在下載依賴搀捷,下面有一個小小的進度條星掰。這時候,請你耐心等待
8.依賴下載完成嫩舟!
當(dāng)我們看到IDEA沒有正在進行的任務(wù)氢烘,上圖的Build:Sync中的所有任務(wù)圖標(biāo)都是OK時,我們的依賴也就下載完成了家厌。
9.關(guān)于Gradle配置窗口
我們可以看到上圖右邊打開了一個工具欄
這個工具欄可能不會自己彈出來播玖。事實上,這個是我點開的饭于,他的開關(guān)在右邊有一個豎著的Gradle文字
這是一個非常有用的窗口蜀踏∥桑可以在里面執(zhí)行Task。他的主要用法我們留到下一次再說(我有點累了)果覆。這個工具箱的左上角有一個像圈圈一樣的圖標(biāo)颅痊,這個是使Gradle刷新依賴的。如果你因為網(wǎng)絡(luò)問題或者后期添加了什么依賴局待,他都會重新解析工程根目錄下的build.gradle配置文件斑响,然后從互聯(lián)網(wǎng)上下載依賴。如果你的build.gradle編寫有誤钳榨,那么這個刷新會失敗舰罚,你可以根據(jù)IDEA的提示去百度解決。
10.這是Spring Boot啟動類重绷,我們需要做出如下修改
我們可以看到這個啟動類位于com.xxcore.code.jvm.spring.api包中沸停。剛好就是我們的Group + Artifact組成的包。名字叫做ApiApplication是我們的Artifact——"api"改變成大駝峰式而后在其后加上Application組成的昭卓。
在@SpringApplication注解中加入如下的exclude參數(shù)
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
此時我們的啟動類應(yīng)該改變成
package com.xxcore.code.jvm.spring.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class ApiApplication
{
public static void main(String[] args)
{
SpringApplication.run(ApiApplication.class, args);
}
}