为什么80%的码农都做不了架构师?>>>   

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

项目

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

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

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

//在不显示使用project变量的情况下设置项目描述
setDescription("myProject")
//在不使用project变量的情况下,通过Groovy语法来访问name和description属性
println "Description of project $name:  " + descriptiontask 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接口。

属性

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

扩展属性

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

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

这里就不给出示例了。

转载于:https://my.oschina.net/fhd/blog/523132

Gradle构建脚本概要之构建块相关推荐

  1. 如何使用Gradle外部脚本进行项目构建

    本文新建一个文件other.gradle, 内容如下: println "configuring $project" task hello {doLast{println 'hel ...

  2. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )

    文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...

  3. (33)Gulp构建脚本文件

    一.构建脚本文件流程图 构建脚本文件和我们构建样式文件是一样的,也是将源代码进行编译,编译以后压缩,然后重命名,最终成为目标文件. 这里脚本文件压缩是将ES6语法转换成ES5语法,比如说箭头函数,它在 ...

  4. 【Android Gradle 插件】settings.gradle 配置文件 ( 配置基本作用 | include 函数用法 | 目录层级配置 | 修改 Module 模块构建脚本名称 )

    文章目录 一.settings.gradle 配置 1.基本作用 2.include 函数用法 3.Module 目录层级配置 4.修改 Module 模块的 build.gradle 默认构建脚本名 ...

  5. 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )

    文章目录 一.Gradle 自动下载并配置构建环境 二.Gradle 提供 API 扩展与开发工具集成 三.Gradle 内置 Maven 和 Ivy 依赖管理 四.Gradle 使用 Groovy ...

  6. 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )

    文章目录 一.AspectJ 下载 二.拷贝 aspectjrt.jar 到 Android Studio 三.配置 Gradle 和 Gradle 插件版本 四.配置 Gradle 构建脚本 一.A ...

  7. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...

  8. Gradle构建脚本入门

    黄少存,叩丁狼高级讲师,本文为原创文章,转载请注明出处.   上一篇咱们已经知道了Gradle构建脚本的重要性,要使用比较复杂的项目构建就需要来书写构建脚本,那Gradle 的构建脚本有哪些呢,请看构 ...

  9. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

最新文章

  1. Jmeter学习笔记三_操作数据库(MySQL)
  2. Logback 配置文件例子
  3. 被低估的css滤镜,你所不知道的 CSS 滤镜技巧与细节
  4. Android Bander设计与实现 - 设计篇
  5. python是怎么写出来的_请问这个怎么用python写出来
  6. iOS之深入解析多环境配置的实现方案
  7. selenium 等待_Selenium等待:内隐,外显,流利和睡眠
  8. 计算机设计大赛国奖作品_4. 界面设计
  9. 与指定数字相同的数的个数(信息学奥赛一本通-T1102)
  10. 语义分割江湖的那些事儿——从旷视说起
  11. POS tagging中英文对应
  12. 计算机网络数据链路层之其基础概述
  13. itextpdf table使用
  14. PHP实现倒计时插件代码
  15. Linux系统下强制删除文件
  16. linux 终端翻译,linux下终端使用有道翻译
  17. html5 调用本地街景,H5案例分享:在移动端调用腾讯街景
  18. html中怎么让盒子模型居中,通过box盒子模型给元素内容设置居中
  19. win11重启键在哪 windows11关机重启的设置方法
  20. mac 妙控板的手势

热门文章

  1. Oracle+jsp+Servlet的员工表的简单增删改查
  2. 用 gdb 调试 GCC 程序
  3. SQL学习笔记:库和表的创建
  4. memcache 启动 储存原理 集群
  5. mysql主从复制错误sql-running no
  6. JQuery EasyUI datagrid 复杂表头处理
  7. 自动设置为兼容模式html5,HTML5中怎么调兼容性?
  8. mysql数据库有几种连接方法_几种常见的数据库连接方法
  9. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解
  10. feed流和瀑布流_Feed流和瀑布流 - kathy829的个人空间 - OSCHINA - 中文开源技术交流社区...