gradle项目构建
compile, runtime, testCompile, and testRuntime 等在Gradle 7.0以后移除了,
我们需要用
implementation, runtimeOnly, testImplementation, and testRuntimeOnly 替代
/**
* 指定所使用的仓库, mavenCentral() 表示使用中央仓库,此刻项目中所需要的 jar 包都会默认从中央仓库下载到指定目录
*/
repositories {
maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/spring/'}
mavenCentral()
}
/**
* gradle工程所有的jar包的坐标都在 dependencies 属性内放置
* 每一个 jar 包的坐标都有三个基本元素组成
* group name version
* testImplementation 表示该 jar 包在测试的时候起作用,该属性为 jar 包的作用域
* 在gradle中添加坐标的时候,都需要带上 jar 包的作用域
*
* compile, runtime, testCompile, and testRuntime 等在Gradle 7.0以后移除了,我们需要用
* implementation, runtimeOnly, testImplementation, and testRuntimeOnly 替代。
*/
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
// https://mvnrepository.com/artifact/org.springframework/spring-context
implementation group: 'org.springframework', name: 'spring-context', version: '5.3.15'
// gradle short 简写 https://mvnrepository.com/artifact/org.springframework/spring-context
// implementation 'org.springframework:spring-context:5.3.15'
}
gradle项目目录结构
Gradle项目默认目录结构和Maven项目的目录结构一致,都是基于约定大于配置
grade源和仓库配置
- gradle 下载源设置
Gradle自带的Maven源地址是国外的,该Maven源在国内的访问速度是很慢的,除非使用特别的手段。一般情况下,我们建议使用国内的第三方开放的Maven源或企业内部自建的Maven源
可以在gradle的init.d目录下创建以 .gradle 结尾的文件。 .gradle文件可以实现在 build 开始之前执行,所以可以在这个文件配置一些想预先加载的操作。
init.d 目录下创建 init.gradle 文件
allprojects {
repositories {
// 本地仓库,地址是maven本地仓库地址
mavenLocal()
// 阿里云仓库
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/spring' }
maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/releases' }
maven { url 'https://maven.aliyun.com/repository/grails-core' }
maven { url 'https://maven.aliyun.com/repository/mapr-public' }
mavenCentral()
}
buildscripts {
repositories {
// 本地仓库,地址是maven本地仓库地址
mavenLocal()
// 阿里云仓库
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/spring' }
maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { url 'https://maven.aliyun.com/repository/releases' }
maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/releases' }
maven { url 'https://maven.aliyun.com/repository/grails-core' }
maven { url 'https://maven.aliyun.com/repository/mapr-public' }
mavenCentral()
}
}
}
启用 init.gradle 文件的方法
1.在命令行指定文件,例如 gradle --init-script yourdir/init.gradle -q taskName
2.把 init.gradle 文件放到 USER_HOME/.gradle/ 目录下
3.把以 .gradle 结尾的文件放到 USER_HOME/.gradle/init.d/ 目录下
4.把以 .gradle 结尾的文件放到 GRADLE_HOME/init.d/ 目录下
- gradle 仓库设置
如果想让gradle下载的文件跟maven仓库在同一个位置,需要设置环境变量 GRADLE_USER_HOME=maven仓库所在位置
Wrapper 包装器
Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本Gradle的问题。例如:把自己的代码共享给他人使用,可能出现如下情况:
1.对电脑没有安装 gradle
2.对方电脑安装过 gradle ,但是版本太旧了
这时候,我们可以考虑使用 Gradle Wrapper 了,这也是官方建议使用 Gradle Wrapper的原因。实际上有了 Gradle Wrapper 之后,我们本地是可以不配置 Gradle 的,下载 Gradle 项目后,使用 Gradle 项目自带的 Wrapper 操作也是可以的。
如何使用 GradleWrapper
项目中的 gradlew 、gradlew.bat 脚本用的就是 Wrapper 中规定的 gradle 版本,
我们也可以在终端执行 gradlew 指令时,指定一些参数来控制 wrapper 的生成。
参数名 | 说明 |
---|---|
–gradle-version | 用于指定使用的gradle版本 |
–gradle-distribution-url | 用于指定下载 gradle发行版的url地址 |
gradle-wrapper.properties
1.zipStoreBase 和 zipStorePath 组合在一起,是下载的 gradle-3.1-bin.zip 所存放的位置。2.zipStorePath 是 zipStoreBase 指定的目录下的子目录。
3.distributionBase 和 distributionPath 组合在一起,是解压 gradle 之后的文件的存放位置。
4.distributionPath 是 distributionBase 指定的目录下的子目录。
5.distributionUrl 是要下载的 gradle 的地址,使用哪个版本的 gradle
字段名 | 说明 |
---|---|
distributionBase | 下载的Gradle压缩包解压后存储的主目录 |
distributionPath | 相对于 distributionBase 的解压后的Gradle压缩后的路径 |
zipStoreBase | 同 distributionBase, 只不过是存放zip压缩包的 |
zipStorePath | 同 distributionPath, 只不过是存放zip压缩包的 |
distributionUrl | Gradle发行版压缩包的下载地址 |
GradleWrapper执行流程
1.当我们第一次执行 .gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息
2.准确的将指定版本的gradle下载并解压搭配指定位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)
3.并构建本地缓存(GRADLE_USER_HOME目录下的 caches 目录中),下载再使用相同版本的gradle就不用下载了
4.之后执行 ./gradlew 所有命令都是使用指定的 gradle 版本
gradle常用指令
常用gradle指令 | 作用 |
---|---|
gradle init | 初始化 gradle 项目 |
gradle clean | 清空build目录 |
gradle classes | 编译业务代码和配置文件 |
gradle test | 编译测试代码,生成测试报告 |
gradle build | 构建项目 |
gradle build -x test | 跳过测试构建项目 |
需要注意的是:gradle指令要在含有 build.gradle 的目录执行
idea 创建 gradle应用缺少目录
task createDirs {
sourceSets*.java.srcDirs*.each {
it.mkdirs()
}
sourceSets*.resources.srcDirs*.each{
it.mkdirs()
}
}