内容

Gradle提供了多种机制来配置Gradle本身和特定项目的行为。以下是使用这些机制的参考。

配置Gradle行为时,您可以使用这些方法,按从最高优先级到最低优先级的顺序列出(前一个获胜):

  • 命令行标志--build-cache。它们优先于属性和环境变量。
  • 系统属性,例如systemProp.http.proxyHost=somehost.org存储在gradle.properties文件中。
  • Gradle属性(例如org.gradle.caching=true通常存储在gradle.properties项目根目录或GRADLE_USER_HOME环境变量中的文件中)。
  • 环境变量,例如GRADLE_OPTS由执行Gradle的环境提供的。

除了配置构建环境,您可以配置使用给定的项目构建项目属性,如-PreleaseType=final

Gradle属性

Gradle提供了几个选项,可以轻松配置将用于执行构建的Java进程。虽然可以通过GRADLE_OPTS或在本地环境中配置这些JAVA_OPTS,但在版本控制中存储某些设置(如JVM内存配置和Java主目录位置)非常有用,这样整个团队就可以使用一致的环境。

为构建设置一致的环境就像将这些设置放入gradle.properties文件一样简单。配置按以下顺序应用(如果在多个位置配置选项,则最后一个获胜):

  • gradle.properties 在Gradle安装目录中。
  • gradle.properties 在项目根目录中。
  • gradle.propertiesGRADLE_USER_HOME目录中。
  • 系统属性,例如在-Dgradle.user.home命令行上设置的时间。

以下属性可用于配置Gradle构建环境:org.gradle.caching=(true,false)

设置为true时,Gradle将尽可能重用任何先前构建的任务输出,从而使构建速度更快。了解有关使用构建缓存的更多信息。org.gradle.caching.debug=(true,false)

设置为true时,将在控制台上记录各个输入属性哈希值以及每个任务的构建缓存键。了解有关任务输出缓存的更多信息。org.gradle.configureondemand=(true,false)

允许按需孵化配置,Gradle将尝试仅配置必要的项目。org.gradle.console=(auto,plain,rich,verbose)

自定义控制台输出着色或详细程度。默认值取决于Gradle的调用方式。有关其他详细信息,请参阅命令行日志记org.gradle.daemon=(true,false)

当设置true摇篮守护进程来运行构建。默认是trueorg.gradle.daemon.idletimeout=(# of idle millis)

Gradle守护程序将在指定的空闲毫秒数后自行终止。默认为10800000(3小时)。org.gradle.debug=(true,false)

设置true为时,Gradle将在启用远程调试的情况下运行构建,侦听端口5005.请注意,这相当于添加-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005到JVM命令行,并将挂起虚拟机,直到连接调试器。默认是falseorg.gradle.java.home=(path to JDK home)

指定Gradle构建过程的Java主目录。可以将值设置为a jdkjrelocation,但是,根据构建的功能,使用JDK会更安全。如果未指定设置,则会从您的环境(JAVA_HOME或路径java)派生合理的默认值。这不会影响用于启动Gradle客户端VM的Java版本(请参阅环境变量)。org.gradle.jvmargs=(JVM arguments)

指定用于Gradle守护程序的JVM参数。该设置对于为构建性能配置JVM内存设置特别有用。这不会影响Gradle客户端VM的JVM设置。org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)

当设置为quiet,warn,lifecycle,info或debug时,Gradle将使用此日志级别。值不区分大小写。该lifecycle级别是缺省值。请参阅选择日志级别org.gradle.parallel=(true,false)

配置完成后,Gradle将分叉到org.gradle.workers.maxJVM以并行执行项目。要了解有关并行任务执行的更多信息,请参阅Gradle性能指南org.gradle.warning.mode=(all,none,summary)

设置为allsummary或者none,Gradle将使用不同的警告类型显示。有关详细信息,请参阅命令行日志记录选org.gradle.workers.max=(max # of worker processes)

配置后,Gradle将使用给定数量的工作者的最大值。默认值是CPU处理器数。另请参见性能命令行选项org.gradle.priority=(low,normal)

指定Gradle守护程序的调度优先级以及它启动的所有进程。默认是normal。另请参见性能命令行选项

以下示例演示了各种属性的用法。示例1.使用gradle.properties文件设置属性gradle.properties

gradlePropertiesProp=gradlePropertiesValue
sysProp=shouldBeOverWrittenBySysProp
systemProp.system=systemValue

GroovyKotlin的build.gradle

task printProps {
    doLast {
        println commandLineProjectProp
        println gradlePropertiesProp
        println systemProjectProp
        println System.properties['system']
    }
}
$ gradle -q -PcommandLineProjectProp = commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp = systemPropertyValue printProps
commandLineProjectPropValue
gradlePropertiesValue
systemPropertyValue
systemValue

系统属性

使用-D命令行选项,可以将系统属性传递给运行Gradle的JVM。在-D该选项的gradle命令有作为的效果相同-D的选项的java命令。

您还可以在gradle.properties带有前缀的文件中设置系统属性systemProp.在中指定系统属性 gradle.properties

systemProp.gradle.wrapperUser =为myuser
systemProp.gradle.wrapperPassword =输入mypassword

可以使用以下系统属性。请注意,命令行选项优先于系统属性。gradle.wrapperUser=(myuser)

指定用户名以使用HTTP基本身份验证从服务器下载Gradle分发。在Authenticated包装器下载中了解更多信息。gradle.wrapperPassword=(mypassword)

使用Gradle包装器指定用于下载Gradle分发的密码。gradle.user.home=(path to directory)

指定Gradle用户主目录。

在多项目构建中,systemProp.将忽略除root之外的任何项目中设置的“ ”属性。也就是说,只检查根项目的gradle.properties文件以查找以“ systemProp.”前缀开头的属性。

环境变量

以下环境变量可用于该gradle命令。请注意,命令行选项和系统属性优先于环境变量。GRADLE_OPTS

指定启动Gradle客户端VM时要使用的JVM参数。客户端VM仅处理命令行输入/输出,因此很少需要更改其VM选项。实际构建由Gradle守护程序运行,该守护程序不受此环境变量的影响。GRADLE_USER_HOME

指定Gradle用户主目录($USER_HOME/.gradle如果未设置,则默认为)。JAVA_HOME

指定用于客户端VM的JDK安装目录。此VM也用于守护程序,除非在Gradle属性文件中指定了另一个org.gradle.java.home

项目属性

您可以通过命令行选项将属性直接添加到Project对象-P

Gradle在看到特别命名的系统属性或环境变量时也可以设置项目属性。如果环境变量名称如下所示,则Gradle将在项目对象上设置属性,值为。Gradle还为系统属性支持此功能,但具有不同的命名模式,如图所示。以下两个都将Project对象的属性设置为。ORG_GRADLE_PROJECT_prop=somevaluepropsomevalueorg.gradle.project.propfoo"bar"通过系统属性设置项目属性

org.gradle.project.foo =栏

通过环境变量设置项目属性

ORG_GRADLE_PROJECT_foo =酒吧
用户主目录中的属性文件优先于项目目录中的属性文件。

如果您没有持续集成服务器的管理员权限,并且需要设置不容易看到的属性值,则此功能非常有用。由于您无法-P在该方案中使用该选项,也无法更改系统级配置文件,因此正确的策略是更改持续集成构建作业的配置,添加与预期模式匹配的环境变量设置。这对系统上的普通用户不可见。

您可以使用其名称来访问构建脚本中的项目属性,就像使用变量一样。

如果引用了项目属性但该项属性不存在,则将引发异常并且构建将失败。在使用Project.hasProperty(java.lang.String)方法访问它们之前,应检查是否存在可选项目属性。

配置JVM内存

您可以通过以下方式调整Gradle的JVM选项:

org.gradle.jvmargs摇篮属性控制虚拟机上运行的版本。它默认为-Xmx512m "-XX:MaxMetaspaceSize=256m"更改构建VM的JVM设置

org.gradle.jvmargs = -Xmx2g -XX:MaxMetaspaceSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8

JAVA_OPTS环境变量控制命令行客户机,其仅用于显示控制台输出。它默认为-Xmx64m更改客户端VM的JVM设置

JAVA_OPTS =“ -  Xmx64m -XX:MaxPermSize = 64m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8”
在一种情况下,客户端VM也可以用作构建VM:如果停用Gradle守护程序并且客户端VM具有与构建VM所需的相同设置,则客户端VM将直接运行构建。否则,客户端VM将分叉新VM以运行实际构建,以便遵守不同的设置。

某些任务(如test任务)也会分叉其他JVM进程。您可以通过任务本身配置它们。它们都-Xmx512m默认使用。示例2.为JavaCompile任务设置Java编译选项GroovyKotlin的build.gradle

plugins {
    id 'java'
}

tasks.withType(JavaCompile) {
    options.compilerArgs += ['-Xdoclint:none', '-Xlint:none', '-nowarn']
}

请参阅Test API文档中的其他示例,并在Java插件参考中测试执行

构建扫描将告诉您有关使用该--scan选项时执行构建的JVM的信息。

构建扫描中的构建环境

使用项目属性配置任务

可以根据在调用时指定的项目属性更改任务的行为。

假设您希望确保发布版本仅由CI触发。处理此问题的一种简单方法是通过isCI项目属性。示例3.防止在CI之外释放GroovyKotlin的build.gradle

task performRelease {
    doLast {
        if (project.hasProperty("isCI")) {
            println("Performing release actions")
        } else {
            throw new InvalidUserDataException("Cannot perform release outside of CI")
        }
    }
}
$ gradle performRelease -PisCI = true --quiet
执行发布操作

通过HTTP代理访问Web

配置HTTP或HTTPS代理(例如,用于下载依赖项)是通过标准JVM系统属性完成的。这些属性可以直接在构建脚本中设置; 例如,设置HTTP代理主机将完成System.setProperty('http.proxyHost', 'www.somehost.org')。或者,可以在gradle.properties中指定属性。使用配置HTTP代理 gradle.properties

systemProp.http.proxyHost = www.somehost.org
systemProp.http.proxyPort = 8080
systemProp.http.proxyUser =用户标识
systemProp.http.proxyPassword =密码
systemProp.http.nonProxyHosts = * nonproxyrepos.com |。本地主机

HTTPS有单独的设置。使用配置HTTPS代理 gradle.properties

systemProp.https.proxyHost = www.somehost.org
systemProp.https.proxyPort = 8080
systemProp.https.proxyUser =用户标识
systemProp.https.proxyPassword =密码
systemProp.https.nonProxyHosts = * nonproxyrepos.com |。本地主机

您可能需要设置其他属性才能访问其他网络。以下是2个可能有用的参考文献:

NTLM身份验证

如果您的代理需要NTLM身份验证,则可能需要提供身份验证域以及用户名和密码。有两种方法可以提供域以验证NTLM代理:

  • http.proxyUser系统属性设置为类似值。domain/username
  • 通过http.auth.ntlm.domain系统属性提供身份验证域。

发表评论

电子邮件地址不会被公开。 必填项已用*标注