【Java】【Gradle】Gradle構建SpringBoot專案,Gradle模組化管理

命運之手發表於2020-03-19

為什麼我要使用Gradle

  • 我是個Android開發者,對Gradle接觸較多,較為熟悉,使用Gradle對我問題不大
  • Gradle比Maven更加簡潔靈活,程式碼看起來更加美觀
  • 我愛研究探索,喜歡折騰,想嘗試新事物。用Gradle構建SpringBoot專案是我自己想出來的,後來去網上一查,還真的可以這樣做
  • 用了一段時間熟悉了之後,發現還是挺方便的。但是Idea中的Gradle和Studio中的Gradle用法還是稍有區別的,因為它們的主程式版本和編譯外掛都不一樣。所以我整理了一下使用方法,分享給大家,這樣大家就可以快速上手,少走彎路

建立父級工程

由於一個工程可能包含多個模組,因此我們需要有個父級工程來包含它們,以方便以後的管理
即便我們的程式碼只有一個模組,從規範的角度來說,也應當有個父級工程,以方便日後的擴充套件

我們新建一個名為【project-hello】的資料夾,作為父級工程的存放位置
在這裡插入圖片描述
在這裡插入圖片描述
由於父級工程只是一個容器,所以我們不需要程式碼目錄,可以從專案結構中刪除,當然也可以留下來用於存放測試程式碼
在【Project Structure】介面中,將【src目錄】標記為【Excluded】,確定後手動刪除該資料夾即可
在這裡插入圖片描述

建立子模組

在工程目錄上右鍵,【New】-【Module】,選擇【Gradle】和【Java】,和建立工程時操作一樣,即可建立多個子模組
在這裡插入圖片描述
在這裡插入圖片描述

引入外部模組

如果我們不想新建模組,而是希望使用已有的程式碼作為模組,那麼有兩種方法
一種是將該模組的程式碼直接拷到當前工程下,在【settings.gradle】中新增【include ‘xxx’】即可
另一種方法是單獨寫一行指令碼,來指定該模組的位置,但是Gradle只支援通過相對路徑來指定位置
如果不是多個工程共享同一份程式碼的話,建議使用第一種方式,比較放在一起更加容易維護、備份、打包
在這裡插入圖片描述

模組間依賴

在模組的【build.gradle】中新增以下指令碼,即可引用其它模組,外部模組也是一樣的,因此模組名都已經在工程中定義了,不管是同工程的還是外部的,都可以直接使用


	dependencies {
	
	    implementation project(":lib-commons")
	    implementation project(":lib-external")
	}
	

在這裡插入圖片描述
新增SpringBoot依賴

直到現在,我們尚未提及任何關於Spring的事情
其實Spring專案和Java專案並無區別,只是多了相應的依賴庫和Spring編譯外掛而已
我們只需在【build.gradle】增加相關配置,就可以把一個普通的Java專案升級為SpringBoot後臺專案


	plugins {
	    id 'org.springframework.boot' version '2.1.6.RELEASE'
	    id 'java'
	}
	
	apply plugin: 'io.spring.dependency-management'
	
	repositories {
	    mavenCentral()
	}
	
	dependencies {
	
	    //模組引用
	    implementation project(":lib-commons")
	    implementation project(":lib-external")
	
	    //SpringBoot
	    implementation 'org.springframework.boot:spring-boot-starter-web'
	    implementation 'org.springframework.boot:spring-boot-starter-validation'
	    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
	
	    //MysqlConnector
	    implementation 'mysql:mysql-connector-java'
	
	    //MybatisPlus
	    implementation 'com.baomidou:mybatis-plus-boot-starter:3.1.2'
	
	    //通用基礎庫
	    implementation 'org.apache.commons:commons-lang3:3.9'
	    implementation 'commons-codec:commons-codec:1.12'
	    implementation 'jaxen:jaxen:1.2.0'
	    implementation 'javax.annotation:javax.annotation-api:1.2'
	
	    //Json Gson
	    implementation 'org.json:json:20180813'
	    implementation 'com.google.code.gson:gson:2.8.5'
	
	    //網路請求庫:OkHttp
	    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
	    implementation 'com.squareup.okio:okio:1.14.1'
	
	    //Socket庫:SocketIO
	    implementation 'com.corundumstudio.socketio:netty-socketio:1.7.17'
	
	    //Lombok註解外掛
	    implementation 'org.projectlombok:lombok:1.16.8'
	    annotationProcessor 'org.projectlombok:lombok:1.16.8'
	
	    //控制檯彩色字型庫
	    implementation 'org.fusesource.jansi:jansi:1.18'
	
	}

新增SpringBoot配置檔案

【resources/application.properties】是SpringBoot預設的配置檔案,我們需要新增一些必要配置服務才能啟動
比如專案地址,專案埠,資料庫地址,資料庫帳號密碼等等,這裡資料庫大家需要改成自己的可用資料庫


	#服務地址
	server.port=8001
	server.servlet.context-path=/hello
	server.servlet.session.timeout=2000s
	
	#資料庫配置
	spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
	spring.datasource.url=jdbc:mysql://192.168.8.83:3306/dwdb2
	spring.datasource.username=root
	spring.datasource.password=123456

除了【application.properties】這個檔案之外,我們還可以建立自己的配置檔案,用於儲存業務配置
建議不要把所有東西都寫在【application.properties】裡面,會影響可讀性,這個檔案只儲存Spring框架的配置即可
比如這裡我們就新建了一個【user_config.properties】檔案,我們可以自己通過【java.util.Properties】類來讀取配置

新增Application類

Application類是SpringBoot預設的啟動入口,其實一個空的SpringBoot專案只需要一個Application類就夠了
Application類的作用是啟動SpringBoot服務,SpringBoot服務啟動後,就會自動去檢索包目錄查詢所有的類檔案
SpringBoot服務根據註解來判斷是否需要建立對應的Controller,Mapper,Bean的例項
因此只有Application類是必需的,其它類都是根據需要來新增的


	package com.easing.backend.tools;
	
	import org.springframework.stereotype.Controller;
	import org.springframework.web.bind.annotation.RequestMapping;
	import org.springframework.web.bind.annotation.ResponseBody;
	
	@Controller
	@RequestMapping("/api")
	public class ApiController {
	
	    @ResponseBody
	    @RequestMapping("/about")
	    public String about() {
	        return "a SpringBoot Project with Gradle";
	    }
	
	}
	

手動修改工程

Gradle專案結構其實非常簡單,無非就是三點:
工程通過settings.gradle檔案來定義子模組
模組通過build.gradle來定義引用的庫或其它模組
通過Project Structure選單來配置哪些目錄是程式碼,哪些目錄是資源,哪些目錄應該被排除出專案

瞭解專案結構和構建原理,可以加深我們對構建工具的理解,出了問題時可以自己去查詢問題所在
如果不理解檔案之間的關聯,只會通過視覺化選單來操作,出了問題經常就會手足無措

Gradle專案結構一般如下
main旁邊的test資料夾是用於單元測試的目錄,如果不需要可以按兩次Delete刪除
第一次Delete將目錄從模組中移除,第二次Delete徹底刪除檔案
在這裡插入圖片描述
原始碼下載

下載地址:a SpringBoot Project with Gradle

原始碼使用說明

【project-hello】是工程根目錄,開啟工程時,請開啟這個目錄
【lib-external】屬於外部模組,是為了演示引入外部模組的,並不屬於工程目錄

注意事項

Gradle中的依賴,除了SpringBoot和通用基礎庫部分,其它的可以刪除
因為你們的資料庫環境,IDEA版本,外掛版本,和我的都不一樣,根據經驗,這些不相容可能會導致編譯活啟動失敗

另外,有的版本的IDEA不能在識別Gradle工程上不是很完善,不會自動生成程式的啟動入口,需要自己建立
在這裡插入圖片描述

相關文章