Gradle入门
基础环境
下载gradle
解压到磁盘
配置环境变量
GRADLE_HOME(MAVEN_HOME)
D:\dev\gradle-7.4PATH
%GRADLE_HOME%\binGRADLE_USER_HOME(maven本地仓库位置)
D:\dev\gradle-7.4\gradle_repository 相当于是配置Gradle 本地仓库位置和 Gradle Wrapper 缓存目录。
配置下载加速
Gradle还是从maven仓库下载的,给gradle安装目录下init.d文件夹,放一个init.gradle文件,即可进行加速下载。内容如下:
1 | gradle.projectsLoaded { |
Gradle项目说明
项目结构
src/main/java
- 文件夹包含所有java源文件。src/test/java
- 文件夹包含所有java测试用例。build.gradle :管理依赖包的配置文件(相当于Maven的pom.xml)。
settings.gradle :可以视为多模块项目的总目录, Gradle 通过它来构建各个模块,并组织模块间的关系。
gradlew :Gradle 命令的包装,当机器上没有安装 Gradle 时,可以直接用 gradlew 命令来构建项目。
gradle/wrapper包 :Gradle 的一层包装,能够让机器在不安装 Gradle 的情况下运行程序,便于在团队开发过程中统一 Gradle 构建的版本, 推荐使用 。
gradle.properties :需手动创建,配置gradle环境变量,或配置自定义变量供 build.gradle 使用。
导包方式
①、implementation
- 导入依赖,不传递给子模块,依赖项将被编译和打包到项目中
②、api
- 导入依赖,传递给子模块,依赖项将被编译和打包到项目中
③、implementation和api的区别
- 关于implementation、api的传递依赖具体问题可以见博问(感谢大佬:@basic60)
https://q.cnblogs.com/q/143866/ - 关于所有的导包方式的区别也可以见管网:
https://docs.gradle.org/current/userguide/java_library_plugin.html
④、compileOnly
- 导入依赖,不传递给子模块,依赖项将被编译到项目中,不打包到项目
⑤、compileOnlyApi
- 导入依赖,传递给子模块,依赖项将被编译到项目中,不打包到项目
build.gradle配置文件
- 相当于Maven的pom文件,主要是配置模块,导入依赖的作用
①、allprojects
- 里面的配置,所有模块生效
- 一般配置包的信息、编码、仓库地址
1 | allprojects { |
②、subprojects
- 里面的配置,只有自己和子模块生效
- 一般配置插件、统一包的版本管理、打包方式等等
1 | subprojects { |
③、dependencies
- 导入依赖,相当于Maven的
<dependency></dependency>
导包 - 引入依赖演示
1 | dependencies { |
- 引入模块演示
1 | dependencies { |
settings.gradle配置文件
- 配置模块间的信息,见后面具体实现
实战
项目结构
1 | -GradleMultiModule |
新建模块
就是用idea创建springboot的gradle项目
各个模块的配置及类
GradleMultiModule模块
顶级父模块
统一配置 build.gradle (还可以配置gradle的版本)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73//插件
plugins {
id 'java'
id 'idea'
id 'java-library'
id 'org.springframework.boot' version '2.7.15'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
//allprojects:所有模块生效
allprojects {
// 配置项目信息
group = 'com.cc'
version = '0.0.1-SNAPSHOT'
// 配置字符编码
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
java {
sourceCompatibility = '8'
targetCompatibility = '8'
}
//仓库配置
repositories {
//本地
mavenLocal()
//阿里仓库
maven { url 'https://maven.aliyun.com/repository/public/' }
//公司仓库。必须用:https。Gradle默认情况下不允许使用不安全的协议,以提高安全性。
maven { url 'https://******:****/repository/maven-public/' }
//中央仓库
mavenCentral()
}
}
//subprojects:所有子模块生效——springboot配置、导包版本管理、打包管理
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'idea'
//所有子模块都是springboot项目,如不是,不能打包。
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
//所有子模块的-依赖版本管理
dependencyManagement {
dependencies {
dependency 'cn.hutool:hutool-all:5.0.7'
dependency "org.apache.commons:commons-lang3:3.5"
}
}
//使用 gradle打包工具
jar {
manifest.attributes provider: 'gradle'
}
tasks.named('test') {
useJUnitPlatform()
}
}
// 配置gradle的版本
wrapper {
//gradle的版本
gradleVersion = '7.4'
//版本类型:BIN、ALL(完全版,可以看gradle的代码)
distributionType = 'ALL'
}配置所有模块的关系 settings.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17rootProject.name = 'GradleMultiModule'
//公共模块总模块
include 'GradleParent'
include ':GradleParent:GradleCommon'
include ':GradleParent:GradleUtil'
project(':GradleParent:GradleCommon')?.name = 'GradleCommon'
project(':GradleParent:GradleUtil')?.name = 'GradleUtil'
//业务模块总模块
include 'GradleServer'
include ':GradleServer:GradleStart'
include ':GradleServer:GradleOne'
include ':GradleServer:GradleTwo'
project(':GradleServer:GradleStart')?.name = 'GradleStart'
project(':GradleServer:GradleOne')?.name = 'GradleOne'
project(':GradleServer:GradleTwo')?.name = 'GradleTwo'
GradleParent模块(公共)
统一公共模块依赖
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12//配置所有子模块
subprojects {
//这里可以导入公共的依赖
dependencies {
// compileOnly:这样做可以确保Lombok在编译时可用,但不会包含在最终的构建产物中,从而减小构建产物的大小。
// api:依赖可以传递给子模块
// compileOnlyApi:仅编译时可用,不包含在构建产物中,并且可以传递给子模块
compileOnlyApi 'org.projectlombok:lombok'
// 表示将Lombok库作为注解处理器导入。
annotationProcessor 'org.projectlombok:lombok'
}
}
GradleCommon模块(公共)
公共模块,存放Entity
build.gradle
1
2
3
4
5dependencies {
// api可以传递依赖、implementation不能传递依赖
// hutool工具类
api 'cn.hutool:hutool-all'
}
GradleUtil模块(公共)
存放所有工具类
build.gradle
1
2
3
4dependencies {
// api可以传递依赖、implementation不能传递依赖
api 'org.apache.commons:commons-lang3'
}
GradleServer模块(业务)
业务模块的父模块,用于统一导入springboot的包
build.gradle
1
2
3
4
5
6
7
8
9
10
11// 子模块生效
subprojects {
//配置子模块依赖
dependencies {
//导入业务模块的公共包 - SpringBoot的包
//不用api,不用传递
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
}
GradleOne模块(业务)
引入:GradleCommon、GradleUtil模块
测试是否能使用引入模块的类、引入模块的依赖
build.gradle
1
2
3
4
5
6dependencies {
//依赖公共模块
//api传递给子模块
api project(":GradleParent:GradleCommon")
api project(":GradleParent:GradleUtil")
}
GradleTwo模块(业务)
引入:GradleCommon、GradleUtil模块
测试是否能使用引入模块的类、引入模块的依赖
build.gradle
1
2
3
4
5
6dependencies {
//依赖公共模块:implementation不传递依赖;api传递依赖
//这里不传递依赖,因为会造成GradleStart有多个重复依赖
implementation project(":GradleParent:GradleCommon")
implementation project(":GradleParent:GradleUtil")
}
GradleStart启动模块(业务)
启动springboot项目
引入所有业务模块
配置SpringMVc
此模块不写任何的业务
build.gradle
1
2
3
4
5
6
7dependencies {
// 依赖GradleOne、GradleTwo,将该模块纳入启动中(加入springboot项目中)
api project(':GradleServer:GradleOne')
api project(':GradleServer:GradleTwo')
// 其他依赖项...
}
简单SpringBoot
1 | plugins { |