Gradle(二) build 环境配置

Gradle build 环境配置

Gradle 提供了多种机制来配置 Gradle build 进程和 Gradle 所构建的 Project 的行为java

咱们可使用下面几种方式来配置 Gradle,优先级从高到低:web

  • 命令行参数

例如:--build-cache缓存

  • System properties

例如存储在 gradle.properties 文件中的systemProp.http.proxyHost=somehost.org 参数服务器

  • Gradle properties

存储在项目根目录下的 gradle.properties 文件中的参数或者是 GRADLE_USER_HOME下的环境变量markdown

  • Environment variables

例如GRADLE_OPTS是由执行 Gradle 的环境提供的。app

除了能够配置 Gradle 构建环境以外,还能够给 Project 对象添加自定义属性,(例如 -PreleaseType=final)来给参与构建的项目添加 releaseType 属性,它的值为 finaljvm

Gradle properties

由于 Gradle build 程序是运行在 Java 虚拟机上的,Gradle 提供了多种可选项来配置 Java 虚拟机的执行参数,有时候调整 Java 虚拟机的参数对 Gradle build 的构建速度提高有很是大的帮助ide

另外在版本控制中存储某些设置(如JVM内存配置和Java home位置)是颇有用的,这样整个团队就能够在一致的环境中工做。gradle

为Gradle 配置一致的构建环境就像将这些设置放入gradle.properties文件同样简单。该配置是全部gradle.properties文件的并集,可是若是在多个文件中配置了一个选项,则优先级高的获胜,如下优先级从高到低:ui

  • System properties

  • gradle.properties 在GRADLE_USER_HOME目录中。

  • gradle.properties 在项目根目录中。

  • gradle.properties 在Gradle安装目录中。

下面是一些用于配置 Gradle 构建环境的一些经常使用参数

  • org.gradle.caching=(true,false)

当设置为 true 时,Gradle 将使用上一次构建的 Task outputs,这个选项一般会让构建更快。

  • org.gradle.caching.debug=(true,false)

当设置为true时,每一个 Task 的 Input 的 hash 值和与之对应的构建缓存 Key 会打印在在控制台上

  • org.gradle.console=(auto,plain,rich,verbose)

自定义控制台输出的颜色或详细程度。默认值取决于Gradle的调用方式

  • org.gradle.daemon=(true,false)

当设置为 true 时,将会启用 Gradle 的守护进程,推荐开启,这将会大大减小屡次构建的重复初始化 的资源消耗

  • org.gradle.daemon.idletimeout=(# of idle millis)

在指定的空闲毫秒数后,Gradle守护程序将自行终止。默认值为10800000(3小时)

  • org.gradle.debug=(true,false)

设置true为时,Gradle将在启用远程调试的状况下运行构建,侦听端口5005。

  • org.gradle.java.home=(path to JDK home)

为 Gradle 的构建进程指定 Java Home,这里的值能够是 jdk 也能够是 jre 的位置,但最好使用 Jdk。若是此项未被设置那么将会从当前环境中获取Java_HOME的值。

  • org.gradle.jvmargs=(JVM arguments) 重要

配置 JVM 的参数,在这里配置 JVM 的内存配置对提高 Gradle 构建的表现颇有用。这里的参数不会影响 Gradle 客户端的虚拟机(这个概念以后应该会提到) 在这里能够配置 JVM 最大堆内存等等,参数之间以空格分离,以-开头,详情参考下方 配置 JVM 内存参数

  • org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)

设置 log 的Level,默认值为 lifecycle,不区分大小写

  • org.gradle.parallel=(true,false)

当设置为true以后,JVM 将会使用 org.gradle.workers.max 所设置的工做进程数来并行的执行构建

  • org.gradle.workers.max=(max # of worker processes)

指定 Gradle 最多使用的工做进程数。默认值为CPU的处理器数

  • org.gradle.priority=(low,normal)

指定 Gradle 守护进程及其启动的全部进程的调度优先级,默认为 normal

  • org.gradle.vfs.verbose=(true,false)

配置查看文件系统的详细日志记录,默认关闭

  • org.gradle.warning.mode=(all,fail,summary,none)

能够配置不一样类型的 warining mode

下面是一个例子:
Example 1. Setting properties with a gradle.properties file

#gradle.properties

gradlePropertiesProp=gradlePropertiesValue
sysProp=shouldBeOverWrittenBySysProp
systemProp.system=systemValue
复制代码
// file:build.gradle.kts
// Project properties can be accessed via delegation

val commandLineProjectProp: String by project
val gradlePropertiesProp: String by project
val systemProjectProp: String by project

tasks.register("printProps") {
    doLast {
        println(commandLineProjectProp)
        println(gradlePropertiesProp)
        println(systemProjectProp)
        println(System.getProperty("system"))
    }
}
复制代码

输出为:

$ gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps
commandLineProjectPropValue
gradlePropertiesValue
systemPropertyValue
systemValue
复制代码

System properties

咱们可使用 -D 的命令行 option 来给运行 Grade 的 JVM 传递 System properties 参数

除了使用命令行,咱们也能够在 gradle.properties 文件中添加 System properties,只须要加上systemProp.前缀:

systemProp.gradle.wrapperUser=myuser
systemProp.gradle.wrapperPassword=mypassword
复制代码

下面是一些有效的 System properties

  • gradle.wrapperUser=(myuser)

指定用户名以使用HTTP基本认证从服务器下载Gradle发行版

  • gradle.wrapperPassword=(mypassword)

指定使用Gradle wrapper 下载Gradle发行版的密码。

  • gradle.user.home=(path to directory)

指定Gradle用户的主目录。

注: 若是这是一个多项目的构建,也就是说在 settings.gradle 文件中 include 多个子项目。那么 “systemProp.” properties 只会读取根目录而其余子项目下的将会被忽略,也就是说若是咱们想要添加 “systemProp.” properties,必须在根目录下的 gradle.properties 文件中添加。

Environment variables

下面有三个用于Gradle Command 的环境变量

  • GRADLE_OPTS

指定启动Gradle客户端虚拟机时使用的JVM参数。客户端虚拟机只处理命令行的输入/输出,因此不多须要更改其VM选项。实际的构建是由Gradle守护进程运行的,它不受这个环境变量的影响。

  • GRADLE_USER_HOME

指定Gradle的用户主目录

  • JAVA_HOME

指定客户端虚拟机使用的JDK安装目录,这个 JDK 安装目录也用于 Gradle 守护进程,除非用org.gradle.java.home在Gradle属性文件中指定了不一样的虚拟机。

Project perperties

对于 Project,若是没有了解过 Gradle 的同窗可能有些陌生,这里就先简单介绍下:一个Gradle 构建至少生成一个 Project 对象,一个 Project 对象就对应一个参与构建的项目,那么相对应的,一个Projct 中就会有不少的 Task。

咱们能够经过-P命令行选项直接向 Project 对象添加属性。

咱们能够经过System properties 或者 Environment variables 添加一些自定义属性,Gradle 就能够将这些自定义属性添加到 Project 属性中。
例如当咱们设置了一个环境变量:ORG_GRADLE_PROJECT_prop=somevalue,那么 Gradle 就会设置一个名为 prop 的属性,它的值为 "somevalue",注意这里的前缀ORG_GRADLE_PROJECT。Gradle 也支持经过设置 System properties 来给 Project 对象添加属性,只是属性的前缀不一样,为:org.gradle.project。就像 org.gradle.project.prop,也能够给 Project 添加一个名为 prop 的属性

  • system property
org.gradle.project.foo=bar
复制代码
  • environment variable
ORG_GRADLE_PROJECT_foo=bar
复制代码

咱们能够直接在 build script 中来使用这些自定义属性

配置 JVM 内存参数

咱们能够用下面的方式来调整 JVM 参数

Gradle properties:org.gradle.jvmargs 的默认值为:-Xmx512m "-XX:MaxMetaspaceSize=256m"

  • 配置 Gradle 的 build 虚拟机内存参数的例子
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
复制代码
  • 配置 Gradle 的 客户端虚拟机内存参数的例子(一般不须要改变)

Gradle 的客户端 仅仅用于输入和控制台的输出等,默认值为:-Xmx64m

JAVA_OPTS="-Xmx64m -XX:MaxPermSize=64m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"
复制代码

某些任务,好比 test 任务,也会fork额外的JVM进程。您能够经过任务自己来配置这些任务。默认状况下,它们都使用-Xmx512m。

//build.gradle.kts

plugins {
    java
}

tasks.withType<JavaCompile>().configureEach {
    options.compilerArgs = listOf("-Xdoclint:none", "-Xlint:none", "-nowarn")
}
复制代码

使用 Project 属性来配置 Task

咱们能够经过添加 Project 属性来完成某些特殊功能,好比咱们如今想让 Release build 只由 CI 触发,那么能够这么写:

//build.gradle.kts

tasks.register("performRelease") {
    doLast {
        if (project.hasProperty("isCI")) {
            println("Performing release actions")
        } else {
            throw InvalidUserDataException("Cannot perform release outside of CI")
        }
    }
}
复制代码
$ gradle performRelease -PisCI=true --quiet
Performing release actions
复制代码
相关文章
相关标签/搜索