文档章节

Gradle构建脚本概要之构建块

柳哥
 柳哥
发布于 2015/10/28 15:27
字数 1140
阅读 101
收藏 0

每个Gradle构建都包含三个基本构建块:projecttaskproperty每个构建至少一个project,进而又包含一个或多个task。project和task暴露的属性可以用来控制构建

项目

在Gradle术语中,一个项目(project)代表一个正在构建的组件(比如,一个JAR文件),或一个想要完成的目标,如部署应用程序。每个Gradle构建脚本至少定义一个项目,当构建进程启动后,Gradle基于build.gradle中的配置实例化org.gradle.api.Project类,并且能够通过project变量使其隐式可用。

一个project可以创建新的task,添加依赖关系和配置,并应用插件和其他的构建脚本。它的许多属性,如name和description,可通过gettersetter方法访问。为什么我们要过早地谈论Gradle的API?你会发现了解Gradle的基本知识之后,你想要更进一步地将概念应用到真实项目中,API就是最有效的使用Gradle的关键

在构建中,project实例让你可以通过代码来访问Gradle的所有特性,比如task的创建和依赖管理。记住,当访问属性和方法时,不需要使用project变量——它会假设你是指Project实例。下面的代码片断展示了如何合理地调用Project实例上的方法:

//在不显示使用project变量的情况下设置项目描述
setDescription("myProject")
//在不使用project变量的情况下,通过Groovy语法来访问name和description属性
println "Description of project $name:  " + description

task testProjectObj << {
  println "ddd"
}

运行:

$ gradle testProjectObj -q

任务

task的一些重要功能:任务动作(task action)和任务依赖(task dependency)。任务动作定义了一个当任务执行时最小的工作单元。这可以简单只打印文本如“Hello world!”或复杂到编译Java源代码。很多时候,运行一个task之前需要运行另一个task,尤其是当task的运行需要另一个task的输出作为输入来完成自己的行动时更是如此。比如,你已经看到过在打包成一个JAR文件之前需要先编译Java源代码。task对于的Gradle的API是org.gradle.api.Task接口。

属性

每个ProjectTask实例都提供了可以通过getter和setter方法访问的属性。一个属性可能是一个任务的描述或项目的版本。后面你会在实例中读和修改这些实例的属性值。通常,你需要定义自己的属性。比如,你可能想要声明一个变量,该变量引用了在同一个构建脚本中多次使用的一个文件。Gradle允许用户通过扩展属性自定义一些变量

扩展属性

Gradle的很多领域模型类提供了特别的属性支持。在内部,这些属性以键值对的形式存储。为了添加属性,你需要使用ext命名空间。让我们来看一个具体的例子:

//只在初始声明扩展属性时需要使用ext命名空间
project.ext.myProp = 'myValue'
ext {
  someOtherProp = 123
}
//使用ext命令空间访问属性是可选的
println myProp == 'myValue'
println project.someOtherProp
ext.someOtherProp = 567
println someOtherProp

task exttest << {
  println 'ext property test'
}

执行:

$ gradle exttest -q

Gradle属性

类似地,额外的属性也可以通过属性文件来提供。Gradle属性可以通过在gradle.properties文件中声明,直接添加到项目中。这个文件位于<USER_HOME>/.gradle目录或项目的根目录下。这些属性可以通过项目实例访问。记住,即使你有多个项目,每个用户也只能有一个Gradle属性文件在<USER_HOME>/.gradle目录下。这是目前Gradle对它的限制。在这个属性文件中声明的属性对所有的项目可用。我们假设下面的属性是在gradle.properties文件中声明的:

exampleProp = myValue
someOtherProp = 455

你可以按照如下方式访问项目中的这两个变量:

assert project.exampleProp == 'myValue'
task printGradleProperty << {
    println "Second property: $someOtherProp"
}

声明属性的其他方式

对于前面两种方式,我们大多用来声明自定义变量及其值。Gradle也提供了很多其他方式为构建提供属性,例如:

  • 项目属性通过 -P 命令行选项提供

  • 系统属性通过 -D 命令行选项提供

  • 环境属性按照这样的模式提供:ORG_GRADLE_PROJECT_propertyName = someValue

这里就不给出示例了。


© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
学习Android构建系统(三)-Gradle基础

引言 Gradle是Android构建系统的重点,需要花费时间用心学习。学习资料主要是官方的Gradle Docs。 Gradle简介 Gradle是一个注重灵活性和性能的开源构建自动化工具,使用Groovy或Kotlin DSL来...

十思叶
2018/08/27
0
0
JNI和NDK编程-使用AndroidStudio进行NDK开发

注意: 1、本文中的原生源代码(native Code)均指代 CC++源代码文件; 2、预构建库 指代 已经预先编译的二进制库(自己编译好或者第三方提供); 3、ABI是Application Binary Interface的缩...

guiying712
2017/07/19
0
0
在 Android Studio 2.2 中愉快地使用 C/C++

Android Studio 2.2 正式版发布后,看到更新内容中有提到对 C/C++ 支持的完善,表示非常高兴。然后将官网上这一部分内容翻译出来,如有错误,欢迎指正。 原文链接:Add C and C++ Code to Y...

曾经花田错
2016/12/27
86
0
gradle/Groovy语法

Groovy官网的介绍(http://www.groovy-lang.org/download.html#gvm) Gradle API 文档: https://docs.gradle.org/current/dsl/org.gradle.api.invocation.Gradle.html 深入理解Android(一)......

shareus
2018/04/27
0
0
Gradle学习(十三)——构建脚本详解

转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/78982312 Gradle的构建语言 Gradle使用DSL来描述构建,是基于Grooy并在之上进行了扩展,以便更易于描述构建。Gradle可以...

lastsweetop
2018/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
423
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
4
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
3
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
7
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部