我們在新起一個項目的時候,一般都會建多個子項目(idea里面稱之為module模塊)。通過gradle構建,多個module之間需要將公用的配置抽取到全局,子項目中只寫差異化的配置,以便于維護。
多模塊項目的gradle目錄結構
示例:我的示例項目demo,我需要有一個common模塊用于公用代碼,一個rest模塊用于提供rest接口,rest依賴common,如果用gradle構建,目錄樹會是這樣:
1
2
3
4
5
6
7
8
|
demo ├── build.gradle -- 全局配置 ├── settings.gradle -- 全局配置 ├── common -- 子模塊 1 目錄 │ └── build.gradle -- 子模塊 1 配置 ├── rest -- 子模塊 2 配置 │ └── build.gradle -- 子模塊 2 配置 ... |
idea下初始創建root目錄結構
a. idea本地創建項目并定義項目名
如果是通過idea新建一個本地項目,可按照如下步驟先創建root項目:
1、file -> new -> project: 選擇gradle->java
2、next, 填寫groupid和artifactid:
groupid: 如com.diboot
artifactid:如demo
3、next, 指定gradle home和jvm等
4、next, 選擇項目存放路徑。完成之后idea會創建相關文件
接下來如果你需要將本地新項目代碼上傳到代碼倉庫,可以通過vcs菜單導入:
b. 基于代碼倉庫指定的項目名創建root項目
而如果項目名已經在倉庫中定義,你需要基于倉庫名初始項目的gradle配置,則項目的初始創建是通過vcs導入,然后用命令行初始化gradle:
- file -> new -> project from version control -> ...
- 切換到terminal命令行,輸入 gradle init,按照操作提示進行root項目的初始化。
創建子模塊/項目
在根目錄demo文件夾右鍵選擇 new -> module -> gradle -> java, 指定子模塊artifactid名稱,依次添加common模塊和rest模塊后,gradle相關的目錄結構就跟我們期望的一致了。
全局gradle配置
在demo根目錄下:
settings.gradle中的結構定義如下
1
2
3
|
rootproject.name = 'demo' include 'common' include 'rest' |
build.gradle中可以定義全局公用的構建配置,以spring boot項目配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
buildscript { ext { springbootversion = '2.1.2.release' } repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' } } dependencies { classpath( "org.springframework.boot:spring-boot-gradle-plugin:${springbootversion}" ) } } // 所有模塊/項目的通用配置 allprojects { group 'com.diboot' version '1.0-snapshot' apply plugin: 'idea' } // 子模塊/項目的統一配置 subprojects { apply plugin: 'java' // 指定jdk版本 sourcecompatibility = 1.8 targetcompatibility = 1.8 // 指定編碼格式 [compilejava,compiletestjava,javadoc]*.options*.encoding = 'utf-8' repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' } } ext { //依賴版本 springbootversion = "2.1.2.release" mysqlconnectorversion = "8.0.13" mybatisstarterversion = "1.3.2" fastjsonversion = "1.2.54" } dependencies { compile( "javax.servlet:javax.servlet-api:4.0.1" ) compile( "org.springframework.boot:spring-boot-starter-web:$springbootversion" ) // mybatis compile( "org.mybatis.spring.boot:mybatis-spring-boot-starter:$mybatisstarterversion" ) // log4j2 compile( "org.springframework.boot:spring-boot-starter-log4j2:$springbootversion" ) // jdbc driver compile( "mysql:mysql-connector-java:$mysqlconnectorversion" ) // json compile( "com.alibaba:fastjson:$fastjsonversion" ) // apache commons compile( "org.apache.commons:commons-lang3:3.8.1" ) // 單元測試 testcompile( "org.springframework.boot:spring-boot-starter-test:$springbootversion" ) testcompile( "junit:junit:4.12" ) } configurations { //移除spring boot 默認logger依賴 all*.exclude module: 'spring-boot-starter-logging' } } |
子模塊/項目gradle配置
通用的依賴配置可以在根目錄下的build.gradle中,子模塊/項目僅配置差異化的部分即可,如子項目特定的依賴。
common下的build.gradle示例:
1
2
3
|
dependencies { // 配置該項目特有的依賴 } |
rest下的build.gradle示例(rest項目依賴common項目):
1
2
3
4
5
|
dependencies { // 依賴common項目 compile project( ":common" ) // 配置該項目特有的依賴 } |
代碼參考:diboot-v2初始項目
gradle官方相關文章:
gradle多項目構建介紹
gradle多項目構建
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://segmentfault.com/a/1190000018028996