项目与资源
Gradle 构建脚本基础
每个
$ cat build.gradle
task hello {
doLast {
println 'Hello world!'
}
}
文件中定义了一个
$ gradle -q hello
Hello world!
Projects
在

一个项目可以创建新任务、添加依赖和配置、应用插件和其他脚本,许多属性比如
// 没有使用project变量来设置项目的描述
setDescription("myProject")
// 使用Grovvy语法来访问名字和描述
println "Description of project $name: " + project.description
Properties
每个
Name | Type | Default Value |
---|---|---|
project |
Project |
The Project instance |
name |
String |
The name of the project directory. |
path |
String |
The absolute path of the project. |
description |
String |
A description for the project. |
projectDir |
File |
The directory containing the build script. |
buildDir |
File |
*projectDir*/build |
group |
Object |
unspecified |
version |
Object |
unspecified |
ant |
AntBuilder |
An AntBuilder instance |
内置属性
在默认情况下,
gradle properties
输出如下:
:properties
------------------------------------------------------------
Root project
------------------------------------------------------------
allprojects: [root project 'gradle-blog']
ant: org.gradle.api.internal.project.DefaultAntBuilder@1342097
buildDir: /home/davenkin/Desktop/gradle-blog/build
buildFile: /home/davenkin/Desktop/gradle-blog/build.gradle
...
configurations: []
convention: org.gradle.api.internal.plugins.DefaultConvention@11492ed
copyFile: task ':copyFile'
...
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@1b5d53a
extensions: org.gradle.api.internal.plugins.DefaultConvention@11492ed
...
helloWorld: task ':helloWorld'
...
plugins: [org.gradle.api.plugins.HelpTasksPlugin@7359f7]
project: root project 'gradle-blog'
...
properties: {...}
repositories: []
tasks: [task ':copyFile', task ':helloWorld']
version: unspecified
BUILD SUCCESSFUL
Total time: 2.667 secs
外部属性
外部属性一般存储在键值对中,要添加一个属性,你需要使用
//Only initial declaration of extra property requires you to use ext namespace
project.ext.myProp = 'myValue'
ext {
someOtherProp = 123
}
//Using ext namespace to access extra property is optional
assert myProp == 'myValue'
println project.someOtherProp
ext.someOtherProp = 567
相似的,外部属性可以定义在一个属性文件中
exampleProp = myValue
someOtherProp = 455
你可以在项目中访问这两个变量:
assert project.exampleProp == 'myValue'
task printGradleProperty << {
println "Second property: $someOtherProp"
}
其他定义方法
你也可以通过下面的方法来定义属性:
- 通过
-P 命令行选项来定义项目属性 - 通过
-D 命令行选项来定义系统属性 - 环境属性遵循这个模式
: ORG_GRADLE_PROJECT_propertyName=someValue
Resource | 资源
Resource Filtering(资源过滤)
有时候我们希望能够在编译的时候动态替换配置文件中的部分值,譬如我们希望能够在打包的时候动态替换应用的版本号,那么可以在类似于
application.version=${application.version}
在
import org.apache.tools.ant.filters.*
processResources {
filter ReplaceTokens, tokens: [
"application.version": project.property("application.version")
]
}
然后在资源中设置:
application.version=@application.version@
注意,在@@
来替换 ${}
作为变量替换,这是因为