Gradle学习笔记之build.gradle文件

简介

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

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

每个build文件都有一个对应的project实例,配置build.gradle文件,实际就是设置project实例里面的属性,或者调用里面的方法。

根项目的project实例可以获取到所有子项目或子模块的project实例,因此我们可以在根项目的build.gradle文件中对子项目进行统一配置,比如应用插件、依赖的maven中心仓库等,常见的build.gradle属性及方法如下所示:
在这里插入图片描述

常见属性代码

// 指定使用什么版本的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"
}

仓库

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()
}

subprojects和allprojects

例如:

allprojects {
    tasks.create("all_test") {
        println("Here we are at ${project.name}")
    }
}


subprojects {
    tasks.create("test_sub") {
        println("Here we are at ${project.name} in subproject")
    }
}

执行gradle build后的输出如下:

(base) PS D:\develop\ideaWorkspace\GradleTest> gradle build -q
Here we are at GradleTest
Here we are at lib1
Here we are at lib2
Here we are at lib3
Here we are at myplugin
Here we are at lib1_1
Here we are at lib1_2
Here we are at lib1 in subproject
Here we are at lib2 in subproject
Here we are at lib3 in subproject
Here we are at myplugin in subproject
Here we are at lib1_1 in subproject
Here we are at lib1_2 in subproject

可见在subprojects的输出中,没有根项目GradleTest。一般来说,subprojectsallprojects是用来配置依赖的。我们也可以通过按名字或相对路径对某个项目进行单独配置:

project("lib2" /*或者:lib2*/ ) {
    tasks.create("test_sub2") {
        println("Here we are at ${project.name} in subproject test 2")
    }
}

ext自定义属性

ProjectTask对象都允许用户添加额外的自定义属性,通过读写ext属性即可实现。如果要同时添加多个自定义属性,通过ext代码块即可:

ext.age = 25
ext {
    name = "szc"
    phone = "1234"
}

task "test_ext" {
    ext {
        desc = "nothing much"
    }

    doLast {
        println "name: ${name}\nphone: ${phone}\nage: ${age}\ndescription: ${desc}"
    }
}

输出如下:

> Task :test_ext
name: test_ext
phone: 1234
age: 25
description: nothing much

系统信息、环境变量、项目属性、JVM配置等信息可在gradle.properties中定义,例如:

# 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xms4096m -Xmx8192m

# 开启gradle缓存
org.gradle.caching=true

# 开启并行编译
org.gradle.parallel=true

# 启用新的孵化模式
org.gradle.configureondemand=true

# 开启守护进程
org.gradle.daemon=true

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)
    }
}

需要注意的是:
1)、buildscript代码段必须是build.gradle文件的第一个代码段;
2)、对于多模块构建,项目的buildscript代码段声明的依赖关系可用于所有子模块的构建脚本;
3)、构建脚本的依赖可能是gradle插件
比如以前在插件一文用的示例:

// 使用传统的应用方式,且buildScript标签必须在所有标签之前
buildscript {
    ext {
        springBootVersion = "2.3.3.RELEASE"
    }
    repositories {
        mavenLocal()
    }

    // 此处先引入插件
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

.....

// 而后再应用插件,在plugins标签之后应用
apply plugin: 'org.springframework.boot' // 社区插件,需要事先引入,不必写版本号
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值