我们通过上面的图片可以看到,项目中跟 Gradle 相关的主要有 7 个部分:
1、父项目下的 build.gradle: 全局配置,配置 Gradle 版本和 Maven 依赖;
2、父项目下的setting.gradle 文件: 全局配置,添加编译的所有模块;
3、父项目下的gradle 文件夹: 配置 gradel-wrapper;
4、子项目下的 build.gralde文件: app 打包和签名配置,及模块的依赖;
5、gradlew 和 gradlew.bat 文件: Gradle 启动脚本文件
6、gradle.projects 文件: 项目范围的梯度设置,编译内存,Gradle 并发性等设置。
7、.gradle 文件夹: 编译时的缓存文件夹这几个部分各自负责的功能都不尽相同。下面我们来看下它们具体的功能。
1.1 父项目下的build.gradle
此配置文件位于项目根目录下,它是顶级构建文件, 用于定义项目所有子项目/模块的配置文件, 可以定义全局公用的构建配置,以Spring Boot项目配置示例:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//顶级构建文件,您可以在其中添加所有 子项目/modules 共有的配置选项
//这个闭包里是配置 Gradle 脚本执行所需要的的依赖,分别是对应 Maven 仓库和构建工具 Gradle 的版本。
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 是基于任务的,这里的clean它是一个 Gradle 任务,它继承自Delete,我们点击clean Project或是执行gradle clean命令的时候就是在执行这个任务,它的任务内容是删除build文件夹下的内容。
task clean(type: Delete) {
delete rootProject.buildDir
}
1.2 gradle-project-service下的build.gradle文件
//配置该子模块持有的依赖
dependencies {
//依赖dao项目
compile project(":gradle-project-dao")
//配置该项目持有的依赖
}
1.3 gradle文件夹
radle 文件夹主要是配置 gradle-wrapper 的,我们看到它的目录下有个wrapper目录,下面有gradle-wrapper.jar和gradle-wrapper.properties两个文件。
下面我们看下gradle-wrapper.properties文件的内容,我们会发现它是配置 Gradle 版本的。看着毫不起眼,但是它却非常重要,关于它的详细介绍我们下一节会做详细的讲解。
1.4 setting.gradle文件
这个文件其实非常简单,就是配置项目的模块的,有几个模块就在 setting.gradle 文件里面添加它们的名字就行了。
rootProject.name = 'gradle-project-parent' include 'gradle-project-dao' include 'gradle-project-service'
1.5 grandle.projects 文件
这个文档一般我们在日常开发中不需要去动它,这个文档主要是项目范围的梯度设置,通过 AndroidStudio 配置的渐变设置将覆盖此文件中指定的任何设置。
主要设置Gradle后台进程JVM内存大小、日记级别等等;
org.gradle.caching=(true,false)
当设置为true时,Gradle将重用来自任何先前构建的任务输出,如果可能,结果是更快的构建。 默认情况下,未启用生成缓存。
org.gradle.caching.debug=(true,false)
设置为true时,每个任务的单个输入属性哈希和生成缓存键都会记录在控制台上。默认值为false。
org.gradle.configureondemand=(true,false)
启用按需配置,Gradle将尝试仅配置必要的项目。默认值为false。
org.gradle.console=(auto,plain,rich,verbose)
自定义控制台输出颜色或详细程度。默认值取决于Gradle的调用方式。
org.gradle.daemon=(true,false)
当设置为true时,Gradle守护进程用于运行构建。默认值为true,将使用守护进程运行构建。
org.gradle.daemon.idletimeout=(# of idle millis)
Gradle守护进程将在指定的空闲毫秒数后自行终止。默认值为10800000(3小时)。
org.gradle.debug=(true,false)
当设置为true时,Gradle将在启用远程调试的情况下运行构建,监听端口5005。请注意,这相当于将-agentlib:jdwp=transport=dt_socket、server=y、suspend=y、address=5005添加到JVM命令行,并将挂起虚拟机,直到附加了调试器。默认值为false。
org.gradle.java.home=(path to JDK home)
指定Gradle构建过程的Java目录。该值可以设置为jdk或jre位置,但是,根据构建的操作,使用jdk更安全。这不会影响用于启动Gradle客户端VM的Java版本(请参阅环境变量)。如果未指定设置,则从您的环境(JAVA_HOME或JAVA路径)派生一个合理的默认值。
org.gradle.jvmargs=(JVM arguments)
指定用于Gradle守护进程的JVM参数。该设置对于为构建性能配置JVM内存设置特别有用。这不会影响Gradle客户端VM的JVM设置。默认值为-Xmx512m“-XX:MaxMetaspaceSize=256m”。
org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)
当设置为静默、警告、生命周期、信息或调试时,Gradle将使用此日志级别。这些值不区分大小写。请参见选择日志级别。生命周期级别是默认值。
org.gradle.parallel=(true,false)
配置后,Gradle将交给org。格拉德尔。工人。最大限度地使用JVM并行执行项目。要了解有关并行任务执行的更多信息,请参阅Gradle构建性能部分。默认值为false。
org.gradle.priority=(low,normal)
指定Gradle守护进程及其启动的所有进程的调度优先级。另请参见性能命令行选项。违约是正常的。
org.gradle.vfs.verbose=(true,false)配置监视文件系统时的详细日志记录。默认值为false。
org.gradle.vfs.watch=(true,false)切换查看文件系统。启用此选项后,Gradle将重新使用它在构建之间收集的有关文件系统的信息。在Gradle支持此功能的操作系统上默认启用。
org.gradle.warning.mode=(all,fail,summary,none) 当设置为all、summary或none时,Gradle将使用不同的警告类型显示。有关详细信息,请参见命令行日志记录选项。默认为摘要。
org.gradle.workers.max=(max # of worker processes)
配置后,Gradle将最多使用给定数量的工作人员。另请参见性能命令行选项。默认值是CPU处理器的数量。
1.6 gradlew 和 gradlew.bat文件
这两个文件其实就是 Gradle 启动的脚本文件,我们可以使用gradlew
命令来打包相当于gradle
命令。关于gradle
的命令我们后面有一节专门介绍。这节我们看下这两个文件的区别,以及怎么使用gradlew
命令。 下面我们看看这两个文件的前面几行:
gradlew 文件 。
#!/usr/bin/env sh ############################################################################## ## ## Gradle start up script for UN*X ## ##############################################################################
gradlew.bat 文件
@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ##########################################################################
1.7 .gradle文件夹
这个文件其实我们不用太在意它,这个文件夹是项目构建的一个缓存的目录。只要我们打开一个 Android 项目,它就会生成这个文件夹。是一个临时的文件夹。