Gradle学习笔记之build.gradle文件

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

简介

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' // 社区插件,需要事先引入不必写版本号
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6