构建环境
目录
一、通过gradle.properties配置构建环境
二、Gradle属性和系统属性
三、通过代理访问web
一、通过gradle.properties配置构建环境
Gradle提供了几个选项,可以轻松配置将用于执行构建的Java进程。 虽然可以通过GRADLE_OPTS或JAVA_OPTS在本地环境中配置它们,但是如果可以使用VCS中的项目对某些设置(如JVM内存设置,Java home,守护程序开/关)进行版本控制,那么整个团队都可以 工作与一致的环境。 为您的构建设置一致的环境与将这些设置放在gradle.properties文件中一样简单。 配置按以下顺序应用(如果在多个位置配置了最后一个选项的选项):
· 从项目构建目录中的gradle.properties。
· 位于gradle.properties的gradle.properties。
· 从系统属性,例如 当在命令行上设置-Dsome.property时。
设置这些属性时,您应该记住,Gradle需要运行Java 7或更高版本的Java JDK或JRE。
以下属性可用于配置Gradle构建环境:
org.gradle.daemon
当设置为true时,Gradle守护程序用于运行构建。 对于本地开发人员构建,这是我们最喜欢的财产。 开发环境针对速度和反馈进行了优化,因此我们几乎总是使用守护进程运行Gradle作业。 由于CI环境针对一致性和可靠性进行了优化,因此我们不会随守护进程运行CI构建(即长时间运行的进程)。
org.gradle.java.home
指定Gradle构建过程的Java home。 该值可以设置为jdk或jre位置,但是,根据构建的内容,jdk更安全。 如果设置未指定,则使用合理的默认值。org.gradle.jvmargs
指定用于守护程序进程的jvmargs。 该设置对于调整内存设置特别有用。 目前的默认设置对于内存来说非常慷慨。
org.gradle.configureondemand
启用新的孵化模式,使Gradle在配置项目时具有选择性。 只有相关项目被配置,导致大型多项目的构建速度更快。
org.gradle.parallel
配置时,Gradle将以孵化并行模式运行。
org.gradle.workers.max
配置时,Gradle将使用给定数量的工作人员的最大值。 有关详细信息,请参见–max-workers。
org.gradle.logging.level
当设置为安静,警告,生命周期,信息或调试时,Gradle将使用此日志级别。 值不区分大小写。 请参见第24.1节“选择日志级别”。
org.gradle.debug
当设置为true时,Gradle将运行构建,启用远程调试,侦听端口5005.请注意,这相当于添加-agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = 5005 to the JVM命令行,并将挂起虚拟机,直到连接调试器。
org.gradle.daemon.performance.enable-monitoring
当设置为false时,Gradle将不会监视正在运行的守护程序的内存使用情况。 org.gradle.caching
当设置为true时,Gradle将尝试重用以前版本的输出。
1.1 叉式Java进程
只有在为构建过程启动新的JVM时,才能指定许多设置(如Java版本和最大堆大小)。 这意味着Gradle必须在分析各种gradle.properties文件后启动单独的JVM进程来执行构建。 使用守护程序运行时,将启动具有正确参数的JVM一次,并为每个守护程序构建执行重新使用。 当没有守护进程执行Gradle时,必须为每个构建执行启动一个新的JVM,除非由Gradle启动脚本启动的JVM具有相同的参数。
在每个构建执行中启动额外的JVM是相当昂贵的,这就是为什么如果要设置org.gradle.java.home或org.gradle.jvmargs,我们强烈建议您使用Gradle守护进程。
二、Gradle属性和系统属性
Gradle提供了多种添加属性到构建的方法。 使用-D命令行选项,您可以将系统属性传递给运行Gradle的JVM。 gradle命令的-D选项与java命令的-D选项具有相同的效果。
你还可以使用属性文件向项目对象添加属性。 您可以将Gradle.properties文件放在Gradle用户主目录中(由“GRADLE_USER_HOME”环境变量定义,如果未设置为默认为USER_HOME / .gradle)或项目目录中。 对于多项目构建,您可以将gradle.properties文件放在任何子项目目录中。 可以通过项目对象访问gradle.properties文件中设置的属性。 用户主目录中的属性文件优先于项目目录中的属性文件。
你还可以通过-P命令行选项将属性直接添加到项目对象。
当查看特定系统属性或环境变量时,Gradle还可以设置项目属性。 当您对持续集成服务器没有管理员权限时,此功能非常有用,并且您需要设置不应该容易看到的属性值,这通常是出于安全考虑。 在这种情况下,您不能使用-P选项,您不能更改系统级配置文件。 正确的策略是更改持续集成构建作业的配置,添加与预期模式匹配的环境变量设置。 对于系统上的普通用户来说,这是不可见的。
如果环境变量名称看起来像ORG_GRADLE_PROJECT_prop = somevalue,那么Gradle将在您的项目对象上设置一个prop属性,其值为somevalue。 Gradle还支持这个系统属性,但是使用不同的命名模式,其类似于org.gradle.project.prop。
您还可以在gradle.properties文件中设置系统属性。 如果这样的文件中的属性名称具有前缀“systemProp”,就像“systemProp.propName”一样,那么属性及其值将被设置为系统属性,不带前缀。 在多项目构建中,除root之外的任何项目中设置的“systemProp”属性将被忽略。 也就是说,只有根项目的gradle.properties文件将被检查以“systemProp。”前缀开头的属性。例12.1使用gradle.properties文件设置属性
gradle.properties
gradlePropertiesProp=gradlePropertiesValue
sysProp=shouldBeOverWrittenBySysProp
envProjectProp=shouldBeOverWrittenByEnvProp
systemProp.system=systemValue
build.gradle
task printProps {
doLast {
println commandLineProjectProp
println gradlePropertiesProp
println systemProjectProp
println envProjectProp
println System.properties[‘system’]
}
}
gradle 的输出-PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps
gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps
commandLineProjectPropValue
gradlePropertiesValue
systemPropertyValue
envPropertyValue
systemValue
2.2.1 检查项目属性
你可以通过使用其使用变量的名称来访问构建脚本中的项目属性。 如果此属性不存在,将抛出异常,构建将失败。 如果您的构建脚本依赖于用户可能设置的可选属性,也许在gradle.properties文件中,您需要在访问它们之前检查存在。 您可以使用返回true或false的方法hasProperty(‘propertyName’)来执行此操作。
三、通过代理访问网络
配置HTTP或HTTPS代理(例如,用于下载相关性)是通过标准JVM系统属性完成的。 这些属性可以直接在构建脚本中设置; 例如,设置HTTP代理主机将使用System.setProperty(‘http.proxyHost’,‘www.somehost.org’)完成。 或者,属性可以在gradle.properties文件中指定,无论是在构建的根目录中还是在Gradle主目录中。
例12.2配置HTTP代理
gradle.properties
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
HTTPS有单独的设置。
例12.3配置HTTPS代理
gradle.properties
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
我们找不到所有可能的代理设置的良好概述。 一个要查看的地方是Ant项目的文件中的常量。 这是一个到存储库的链接。 另一个是JDK文档中的“网络属性”页面。 如果有人知道更好的概述,请通过邮件列表通知我们。
3.3.1NTLM认证
如果您的代理需要NTLM身份验证,您可能需要提供身份验证域以及用户名和密码。 有两种方法可以提供用于认证NTLM代理的域:
· 将http.proxyUser系统属性设置为像domain / username这样的值。
· 通过http.auth.ntlm.domain系统属性提供身份验证域。
为了便于交流共同学习,可以加QQ群861531554(Android学习交流) 欢迎批评指导!!!