Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八

简介: 有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41006627 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html

本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41006627

关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。


第十四章. 教程 - 杂七杂八

14.1. 创建目录

有一个常见的情况是,多个任务都依赖于某个目录的存在。当然,你可以在这些任务的开始加入mkdir来解决这个问题。但这是种臃肿的解决方法。这里有一个更好的解决方案 (仅适用于这些需要这个目录的任务有着dependsOn的关系的情况):

示例 14.1. 使用 mkdir 创建目录

build.gradle

classesDir = new File('build/classes')
task resources << {
    classesDir.mkdirs()
    // do something
}
task compile(dependsOn: 'resources') << {
    if (classesDir.isDirectory()) {
        println 'The class directory exists. I can operate'
    }
    // do something
}

gradle -q compile的输出结果

> gradle -q compile
The class directory exists. I can operate

14.2. Gradle 属性和系统属性

Gradle 提供了许多方式将属性添加到您的构建中。 从Gradle 启动的 JVM,你可以使用-D命令行选项向它传入一个系统属性。 Gradle命令的-D选项和java命令的-D选项有着同样的效果。

此外,您也可以通过属性文件向您的project对象添加属性。您可以把一个gradle.properties文件放在 Gradle 的用户主目录 (默认为USER_HOME/.gradle) ,或您的项目目录中。对于多项目构建,您可以将gradle.properties文件放在任何子项目的目录中。通过project对象,可以访问到gradle.properties里的属性。用户的主目录中的属性文件比项目目录中的属性文件更先被访问到。

你也可以通过使用-P命令行选项来直接向您的项目对象添加属性。在更多的用法中,您甚至可以通过系统和环境属性把属性直接传给项目对象。例如,如果你在一个持续集成服务器上运行构建,但你没有这台机器的管理员权限,而你的构建脚本需要一些不能让其他人知道的属性值,那么,您就不能使用-P选项。在这种情况下,您可以在项目管理部分 (对普通用户不可见) 添加一个环境属性。[6]如果环境属性遵循ORG_GRADLE_PROJECT_propertyName= somevalue的模式,这里的propertyName会被添加到您的项目对象中。对系统属性我们也支持相同的机制。唯一的区别是,它是org.gradle.projectpropertyName的模式。

通过gradle.properties文件,你还可以设置系统属性。如果此类文件中的属性有一个systemProp.的前缀,该属性和它的值会被添加到系统属性,且不带此前缀。在多项目构建中,除了在根项目之外的任何项目里的 systemProp.属性集都将被忽略。也就是,只有根项目gradle.properties文件里的systemProp.属性会被作为系统属性。

未例 14.2. 使用 gradle.properties 文件设置属性

gradle.properties

gradlePropertiesProp=gradlePropertiesValue
systemProjectProp=shouldBeOverWrittenBySystemProp
envProjectProp=shouldBeOverWrittenByEnvProp
systemProp.system=systemValue

build.gradle

task printProps << {
    println commandLineProjectProp
    println gradlePropertiesProp
    println systemProjectProp
    println envProjectProp
    println System.properties['system']
}

gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps的输出结果

> gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps
commandLineProjectPropValue
gradlePropertiesValue
systemPropertyValue
envPropertyValue
systemValue

14.2.1.检查项目的属性

当你要使用一个变量时,你可以仅通过其名称在构建脚本中访问一个项目的属性。如果此属性不存在,则会引发异常,并且构建失败。如果您的构建脚本依赖于一些可选属性,而这些属性用户可能在比如 gradle.properties 文件中设置,您就需要在访问它们之前先检查它们是否存在。你可以通过使用方法hasProperty('propertyName') 来进行检查,它返回truefalse

14.3. 使用外部构建脚本配置项目

您可以使用外部构建脚本来配置当前项目。Gradle 构建语言的所有内容在外部脚本中也可以使用。您甚至可以在外部脚本中应用其他脚本。

示例14.3. 使用外部构建脚本配置项目

build.gradle

apply from: 'other.gradle'

other.gradle

println "configuring $project"
task hello << {
    println 'hello from other script'
}

gradle -q hello的输出结果

> gradle -q hello
configuring root project 'configureProjectUsingScript'
hello from other script

14.4. 配置任意对象

您可以用以下非常易理解的方式配置任意对象。

示例 14.4. 配置任意对象

build.gradle

task configure << {
    pos = configure(new java.text.FieldPosition(10)) {
        beginIndex = 1
        endIndex = 5
    }
    println pos.beginIndex
    println pos.endIndex
}

gradle -q configure的输出结果

> gradle -q configure
1
5

14.5. 使用外部脚本配置任意对象

你还可以使用外部脚本配置任意对象

示例14.5. 使用脚本配置任意对象

build.gradle

task configure << {
    pos = new java.text.FieldPosition(10)
    // Apply the script
    apply from: 'other.gradle', to: pos
    println pos.beginIndex
    println pos.endIndex
}

other.gradle

beginIndex = 1;
endIndex = 5;

gradle -q configure的输出结果

> gradle -q configure
1
5

14.6. 缓存

为了提高响应速度,默认情况下 Gradle 会缓存所有已编译的脚本。这包括所有构建脚本,初始化脚本和其他脚本。你第一次运行一个项目构建时, Gradle 会创建.gradle目录,用于存放已编译的脚本。下次你运行此构建时, 如果该脚本自它编译后没有被修改,Gradle 会使用这个已编译的脚本。否则该脚本会重新编译,并把最新版本存在缓存中。如果您通过--recompile-scripts选项运行 Gradle ,会丢弃缓存的脚本,然后重新编译此脚本并将其存在缓存中。通过这种方式,您可以强制 Gradle 重新生成缓存。



[6] TeamcityBamboo就是提供这个功能的 CI 服务器的例子。


目录
相关文章
|
Java Linux Shell
Gradle下载和配置教程:Windows、Mac和Linux系统安装指南
Gradle下载和配置教程:Windows、Mac和Linux系统安装指南
1211 0
IDEA 降级gradle插件教程
IDEA 降级gradle插件教程
1385 0
IDEA 降级gradle插件教程
|
XML 缓存 搜索推荐
Gradle构建工具极简教程
Gradle构建工具极简教程
359 0
Gradle构建工具极简教程
|
开发工具 Android开发
Android SMSSDK非Gradle集成教程
一、说明(1)3.x与之前的旧版本互不兼容,请严格按照本文档进行3.x的首次集成或老版本的升级操作。(2)3.x之前版本的集成,请参考:http://wiki.mob.com/android-%e7%9f%ad%e4%bf%a1sdk%e9%9b%86%e6%88%90%e6%96%87%e6%a1%a3/–>集成之前先要申请Mob的appkey与appsecret;申请完添加短信SDK的产品;得到key我们开始集成;二、获取SDK请至Mob官网下载最新SDK,解压后会看到以下目录结构:SMSSDK下存放的是短信SDK的全部内容。
1523 0
|
JavaScript Java Maven
《Kotin 极简教程》第12章 使用 Kotlin 集成Gradle 开发
第12章 使用 Kotlin 集成Gradle 开发 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ 由于 Kotlin 具有丰富的功能,如一等函数和扩展方法等,因此它可以保留和改进 Gradle 构建脚本的最佳部分——包括简明的声明式语法以及轻松制作 DSL 的能力。
2041 0
《Groovy极简教程》第7章 Groovy与Gradle
《Groovy极简教程》第7章 Groovy与Gradle
1008 0
|
Java 数据库连接 Maven
翻译:Gradle之依赖管理
  原文地址 http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html   8.1. What is dependency management?何谓?为何? 依赖管理大致有两块:首先Gradle需要找到你工程需要的东西,这些东西就是所谓的“依赖”。
834 0
|
Java 测试技术 API
翻译--Gradle之Java工程入门
原文地址 http://www.gradle.org/docs/current/userguide/tutorial_java_projects.html   7.1. The Java plugin插件 我们已经看到Gradle是一个通用构建工具,它可以完成相当多的任务,只要你能在脚本里定义好。
1261 0
|
API
翻译:Gradle之构建脚本入门
原文地址http://www.gradle.org/docs/current/userguide/tutorial_using_tasks.html 6.1. Projects and tasks工程和任务 Gradle中的任何东西都基于俩概念: projects 工程 和 tasks 任务。
846 0