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 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步改动。
第十四章. 教程 - 杂七杂八
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
命令行选项来直接向您的项目对象加入属性。在很多其它的使用方法中。您甚至能够通过系统和环境属性把属性直接传给项目对象。
比如,假设你在一个持续集成server上执行构建。但你没有这台机器的管理员权限,而你的构建脚本须要一些不能让其它人知道的属性值。那么,您就不能使用-P
选项。
在这样的情况下,您能够在项目管理部分
(对普通用户不可见) 加入一个环境属性。[6]假设环境属性遵循ORG_GRADLE_PROJECT_
的模式。这里的propertyName
=
somevaluepropertyName
会被加入到您的项目对象中。对系统属性我们也支持同样的机制。唯一的差别是,它是org.gradle.project
的模式。propertyName
通过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')
来进行检查,它返回true
或false
。
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] Teamcity或Bamboo就是提供这个功能的
CI server的样例。
Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八的更多相关文章
- Gradle 1.12 翻译——第十六章. 使用文件
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- Gradle 1.12翻译——第十九章. Gradle 守护进程
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12 翻译——第十五章. 任务详述
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12 翻译——第十二章 使用Gradle 图形用户界面
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第二十四章. Groovy 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12 翻译——第十八章. 日志
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第四十四章. 分发插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第六十四章. 发布到Ivy(新)
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...
随机推荐
- iOS 监听键盘变化
//将要显示键盘 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowKeyboard: ...
- C++类包含问题(重复包含和相互包含)
一.重复包含头文件 头文件重复包含,可能会导致的错误包括:变量重定义,类型重定义及其他一些莫名其妙的错误.C++提供两种解决方案,分别是#ifndef和#pragma once #ifndef _SO ...
- C/C++中字符串的输入问题
standard C I/O 头文件:#include <stdio.h> . getchar() 原型:int getchar(void); 功能:从标准输入获取并返回下一个字符,并释放 ...
- .NET中的IO操作基础介绍
关于IO简介 .NET中的IO操作,经常需要调用一下几个类. clipboard[] .FileStream类 文件流类,负责大文件的拷贝,读写. .Path类 Path类中方法,基本都是对字符串(文 ...
- C语言,函数的声明与定义
函数声明与定义 变量: 在讲变量前,先讲一下变量的声明和定义这两个概念. 声明一个变量,意味着向编译器描述变量的类型,但不为变量分配存储空间. 定义一个变量,意味着在声明变量的同时还要为变量分配存储空 ...
- 托管服务帐号(Managed Service Account)
托管服务帐号是绑定到单独的机器上,并且仅用于服务所用,所以不能用来登录. 创建托管帐号,不需要指定密码,密码会由活动目录自动管理.并且根据密码策略(默认30天)自动刷新,期间不影响服务. 在创建完之后 ...
- 9.PHP 教程_PHP运算符
PHP 运算符 在 PHP 中,赋值运算符 = 用于给变量赋值. 在 PHP 中,算术运算符 + 用于把值加在一起. PHP 算术运算符 运算符 名称 描述 实例 结果 x + y 加 x 和 y 的 ...
- 解决IDAPython: importing "site" failed.的问题
当我打开IDA6.8时候,里面报Warning, IDAPython: importing "site" failed. WTF!? 我点了OK后,进去发现IDA底部的python ...
- 如何调试MFC中的内存泄漏
转载地址:http://www.cnitblog.com/martin/archive/2006/04/21/9460.html 首先,应该是MFC报告我们发现内存泄漏.注意:要多运行几次,以确定输出 ...
- hdoj 3065 病毒侵袭持续中(AC自动机)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...