Gradle build.gradle 文件

简介: Gradle build.gradle 文件

build.gradle 是一个 gradle 的构建脚本文件,支持 java、groovy 等语言。

每个 project 都会有一个 build.gradle 文件,该文件是项目构建的入口,可配置版本、插件、依赖库等信息。

每个 build 文件都有一个对应的 Project 实例,对 build.gradle 文件配置,本质就是设置 Project 实例的属性和方法。

由于每个 project 都会有一个 build 文件,那么 Root Project 也不列外.Root Project 可以获取到所有 Child Project,所以在 Root Project 的 build 文件中我们可以对 Child Project 统一配置,比如应用的插件、依赖的 maven 中心仓库等。

build 文件中常见的属性和方法如下所示:

1673445009881.jpg


1、常见属性代码


//指定使用什么版本的JDK语法编译源代码,跟编译环境有关,在有java插件时才能用
sourceCompatibility = 1.8 
//指定生成特定于某个JDK版本的class文件:跟运行环境有关,在有java插件时才能用 
targetCompatibility = 1.8 
//业务编码字符集,注意这是指定源码解码的字符集[编译器] 
compileJava.options.encoding "UTF-8" 
//测试编码字符集,注意这是指定源码解码的字符集[编译器] 
compileTestJava.options.encoding "UTF-8" 
//编译JAVA文件时采用UTF-8:注意这是指定源码编码的字符集【源文件】 
tasks.withType(JavaCompile) { 
    options.encoding = "UTF-8" 
}
//编译JAVA文件时采用UTF-8:注意这是指定文档编码的字符集【源文件】 
tasks.withType(Javadoc) { 
    options.encoding = "UTF-8" 
}


提示 1:group+name+version 类似于 maven 的 group+artifactId+version

提示 2:encoding 解决业务代码与测试代码中文乱码问题


2、Repositories


repositories { 
    //gradle中会按着仓库配置的顺序,从上往下依次去对应的仓库中找所需要的jar包: 
    //如果找到,则停止向下搜索,如果找不到,继续在下面的仓库中查找 
    //指定去本地某个磁盘目录中查找:使用本地file文件协议:一般不用这种方式 maven { url 'file:///D:/repos/mavenrepos3.5.4'} 
    maven { url "$rootDir/lib/release" } 
    //指定去maven的本地仓库查找 
    mavenLocal() 
    //指定去maven的私服或者第三方镜像仓库查找 
    maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" } 
    maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" } 
    //指定去maven的远程仓库查找:即 https://repo.maven.apache.org/maven2/
    mavenCentral() 
    //去google仓库查找 
    google() 
}


因为 Gradle 没有自己的远程仓库,而是使用 Maven、jcenter、jvy、google 这些远程仓库。


3. Subprojects 与 Allprojects


allprojects 是对所有 project(包括 Root Project+ child Project[当前工程和所有子工程])的进行统一配置,而 subprojects 是对所有 Child Project 的进行统一配置。

allprojects { 
    tasks.create('hello') { 
        doLast { 
            task ->println "project name is $task.project.name" 
        } 
    } 
}
subprojects { 
    hello.doLast{ 
        task-> println "here is subprojects $task.project.name" 
    } 
}


通常在 subprojects 和 allprojects 中:

allprojects(){ //本质Project中的allprojects方法,传递一个闭包作为参数。 
    apply plugin: 'java' 
    ext {
        junitVersion = '4.10' 
        .. 
    }
    task allTask{ 
        ... 
    }
    repositories { 
        ... 
    }
    dependencies { 
        ... 
    } 
}
subprojects(){ 
    …//同上面allprojects中的方法。 
}


1: 如果是直接在 根 project 配置 repositories 和 dependencies 则 只针对根工程有效。

2: 我们也可以在对单个 Project 进行单独配置:

project('subject01') { 
    task subject01 { 
        doLast { 
            println 'for subject01' 
        } 
    } 
}


执行 gradle build 指令即可查看测试效果。


4、ext 用户自定义属性


Project 和 Task 都允许用户添加额外的自定义属性,要添加额外的属性,通过应用所属对象的 ext 属性即可实现。添加 之后可以通过 ext 属性对自定义属性读取和设置,如果要同时添加多个自定义属性,可以通过 ext 代码块:

//自定义一个Project的属性 
ext.age = 18 
//通过代码块同时自定义多个属性 
ext {
    phone = 19292883833 
    address="北京" 
}
task extCustomProperty { 
    //在task中自定义属性 
    ext {
        desc = "奥利给" 
    }
    doLast { 
        println "年龄是:${age}" 
        println "电话是:${phone}" 
        println "地址是:${address}" 
        println "口号:${desc}" 
    } 
}


测试:通过 gradle extCustomProperty

输出结果为:


年龄是:18

电话是:19292883833

地址是:北京

口号:奥利给


ext 配置的是用户自定义属性,而 gradle.properties 中一般定义 系统属性、环境变量、项目属性、JVM 相关配置 信息。例如 gradle.properties 文件案例:加快构建速度的,gradle.properties 文件中的属性会自动在项目运行时加载。

## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出 
org.gradle.jvmargs=-Xms4096m -Xmx8192m 
## 开启gradle缓存 
org.gradle.caching=true 
#开启并行编译 
org.gradle.parallel=true 
#启用新的孵化模式 
org.gradle.configureondemand=true 
#开启守护进程 
org.gradle.daemon=true


5、Buildscript


buildscript 里是 gradle 脚本执行所需依赖,分别是对应的 maven 库和插件。

import org.apache.commons.codec.binary.Base64 
buildscript { 
    repositories { 
        mavenCentral() 
    }
    dependencies { 
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' 
    } 
}
tasks.register('encode') { 
    doLast { 
        def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
        println new String(encodedString) 
    } 
}


需要注意的是:


buildscript{}必须在 build.gradle 文件的最前端。

2.对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。

构建脚本依赖可能是 Gradle 插件。

如下所示:

//老式apply插件的引用方式,使用apply+buildscript 
buildscript { 
    ext {
        springBootVersion = "2.3.3.RELEASE" 
    }
    repositories { 
        mavenLocal() 
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } 
        jcenter() 
    }
    //此处引入插件 
    dependencies { 
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
}
apply plugin: 'java' //核心插件,无需事先引入 
apply plugin: 'org.springframework.boot' //社区插件,需要事先引入,才能应用,不必写版本号
asspath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
}
apply plugin: 'java' //核心插件,无需事先引入 
apply plugin: 'org.springframework.boot' //社区插件,需要事先引入,才能应用,不必写版本号


相关文章
|
Android开发
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
1470 0
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
|
4月前
|
Java Maven 数据安全/隐私保护
Gradle笔记 三 Gradle的项目周期和settings 文件
Gradle笔记 三 Gradle的项目周期和settings 文件
48 0
Gradle笔记 三 Gradle的项目周期和settings 文件
|
4月前
|
Unix Linux iOS开发
在EMAS上,您可以使用脚本来获取build.gradle文件中的versionName
在EMAS上,您可以使用脚本来获取build.gradle文件中的versionName
39 7
|
Java Maven 数据安全/隐私保护
Gradle 项目的生命周期和settings文件
Gradle 项目的生命周期和settings文件
Gradle 项目的生命周期和settings文件
|
Java API Android开发
通过自定义Gradle插件修改编译后的class文件
通过自定义Gradle插件修改编译后的class文件
通过自定义Gradle插件修改编译后的class文件
|
Java 开发工具 Android开发
安卓开发必备——build.gradle文件初探(二)
上一篇(安卓开发必备——build.gradle文件初探(一) - 掘金 (juejin.cn))我们探讨了关于安卓项目中最外层目录下的build.gradle,这一篇我们将继续说build.gradle文件
265 0
|
API 开发工具 Android开发
Gradle 系列(5)一键检索未适配 64 位架构的 so 文件
Gradle 系列(5)一键检索未适配 64 位架构的 so 文件
337 0
Gradle 系列(5)一键检索未适配 64 位架构的 so 文件
|
Java 容器
Gradle从0入门到实战系列【四】build.gradle之Task
任务是gradle的最小执行单元,一个build.gradle是由一系列的task组成,重要性不言而喻,在前面课程中我们或多或少做了一些了解,接下来我们真正认识task。
319 0
Gradle从0入门到实战系列【四】build.gradle之Task
|
架构师 Java 测试技术
Gradle从0入门到实战系列【三】build.gradle之Project
在gradle中,每一个build.gradle文件对应一个Project实例,我们在build.gradle中编写的内容,就相当于Project实例的属性或方法, build.gradle和Maven中的pom.xml都是一个项目(project)的依赖配置文件,只有掌握了Project相关知识,才能编写出强大的build.gradle。
673 1
Gradle从0入门到实战系列【三】build.gradle之Project