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 文件中常见的属性和方法如下所示:
常见属性代码
代码参考:
//指定使用什么版本的JDK语法编译源代码,跟编译环境有关,在有java插件时才能用 sourceCompatibility = 1.8 //指定生成特定于某个JDK版本的class文件:跟运行环境有关,在有java插件时才能用 targetCompatibility = 1.8 //业务编码字符集,注意这是指定源码解码的字符集[编译器] compileJava.options.encoding "UTF-8" //测试编码字符集,注意这是指定源码解码的字符集[编译器] compileTestJava.options.encoding "UTF-8" //编译JAVA文件时采用UTF-8:注意这是指定源码编码的字符集【源文件】t asks.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 解决业务代码与测试代码中文乱码问题
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 这些远程仓库。
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 则只针对根工程有效。拓展:我们也可以在对单个 Project 进行单独配置:
project('subject01') { task subject01 { doLast { println 'for subject01' } } }
ext 用户自定义属性
Project 和 Task 都允许用户添加额外的自定义属性,要添加额外的属性,通过应用所属对象的ext 属性即可实现。添加之后可以通过 ext 属性对自定义属性读取和设置,如果要同时添加多个自定义属性,可以通过 ext 代码块:
//自定义一个Project的属性 ext.age = 18 //通过代码块同时自定义多个属性 ext { phone = 19292883833 address="北京onenewcode" } task extCustomProperty { //在task中自定义属性 ext { desc = "奥利给" } doLast { println " 年 龄 是 :${age}" println "电话是:${phone}" println "地址是:${address}" println "onenewcode:${desc}" } }
测试:通过 gradle extCustomProperty
输出结果为:
年龄是:18 电话是:19292883833 地址是:北京onenewcodeonenewcode:奥利给
Gradle笔记 七 publishing 项目发布(二)https://developer.aliyun.com/article/1391985