Gradle 1.12用户指南翻译——第二十一章. Gradle 插件
昨天晚上只顾着和女朋友看《匆匆那年》电视剧的最后几集,所以说好的Android文档《Gradle 插件用户指南》第五章自然也没翻译多少。所以今天也发不了第五章的翻译了,就发几个星期前译好的《Gradle 1.12用户指南》的第二十一章吧。
在博客上发的其他章节的翻译请参见:
http://blog.csdn.net/column/details/gradle-translation.html
翻译项目请关注Github上的地址:
https://github.com/msdx/gradledoc/tree/1.12。
直接浏览双语版的文档请访问:
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。
另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,兼容2.1以上(5.0没试过)的Android系统,地址如下:
http://www.wandoujia.com/apps/com.githang.gradledoc
翻译不易,转载请注明本文在CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/41977599
关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。
第二十一章. Gradle 插件
Gradle 在它的核心中有意地提供了一些小但有用的功能,用于在真实世界中的自动化。所有有用的功能,例如以能够编译 Java 代码为例,都是通过插件进行添加的。插件添加了新任务
(例如JavaCompile
),域对象
(例如SourceSet
),约定(例如主要的
Java 源代码是位于src/main/java
),以及扩展的核心对象和其他插件的对象。
在这一章中,我们将讨论如何使用插件以及术语和插件相关的概念。
21.1.
应用插件
插件都认为是被应用,通过Project.apply()
方法来完成。
示例 21.1. 应用插件
build.gradle
apply plugin: 'java'
插件都有表示它们自己的一个短名称。. 在上述例子中,我们使用短名称java
去应用JavaPlugin
。
我们还可以使用下面的语法:
示例 21.2. 通过类型应用插件
build.gradle
apply plugin: org.gradle.api.plugins.JavaPlugin
由于 Gradle 的默认导入 (见附录
E,现有的 IDE 支持和如何应对不支持的情况),您还可以这样写:
示例 21.3. 通过类型应用插件
build.gradle
apply plugin: JavaPlugin
插件的应用是幂等的。也就是说,一个插件可以被应用多次。如果以前已应用了该插件,任何进一步的应用都不会再有任何效果。
一个插件是任何实现了 Plugin
接口的简单的类。Gradle
提供了核心插件作为其发行包的一部分,所以简单地应用如上插件是你所需要做的。然而,对于第三方插件,你需要进行配置以使插件在构建类路径中可用。有关如何进行此操作的详细信息,请参阅59.5章节,“构建脚本的外部依赖”。
关于编写自己的插件的详细信息,请参阅58章节,编写自定义插件。
21.2. 插件都做了什么
把插件应用到项目中可以让插件来扩展项目的功能。它可以做的事情如:
- 将任务添加到项目 (如编译、 测试)
- 使用有用的默认设置对已添加的任务进行预配置。
- 向项目中添加依赖配置 (见第
8.3 节,“依赖配置”)。 - 通过扩展对现有类型添加新的属性和方法。
让我们来看看:
示例 21.4. 通过插件添加任务
build.gradle
apply plugin: 'java' task show << { println relativePath(compileJava.destinationDir) println relativePath(processResources.destinationDir) }
gradle
的输出结果
-q show
> gradle -q show build/classes/main build/resources/main
Java 插件已经向项目添加了 compileJava
任务和processResources
任务,并且配置了这两个任务的destinationDir
属性。
21.3. 约定
插件可以通过智能的方法对项目进行预配置以支持约定优于配置。Gradle 对此提供了机制和完善的支持,而它是强大-然而-简洁的构建脚本中的一个关键因素。
在上面的示例中我们看到,Java 插件添加了一个任务,名字为compileJava
,有一个名为destinationDir
的属性(即配置编译的
Java 代码存放的地方)。Java 插件默认此属性指向项目目录中的build/classes/main
。这是通过一个合理的默认的约定优于配置的例子。
我们可以简单地通过给它一个新的值来更改此属性。
示例 21.5. 更改插件的默认设置
build.gradle
apply plugin: 'java' compileJava.destinationDir = file("$buildDir/output/classes") task show << { println relativePath(compileJava.destinationDir) }
gradle
的输出结果
-q show
> gradle -q show build/output/classes
然而, compileJava
任务很可能不是唯
一需要知道类文件在哪里的任务。
Java 插件添加了 source
sets 的概念 (见SourceSet
)
来描述的源文件集的各个方面,其中一个方面是在编译的时候这些类文件应该被写到哪个地方。Java 插件将compileJava
任务的destinationDir
属性映射到源文件集的这一个方面。
我们可以通过这个源码集修改写入类文件的位置。
示例 21.6. 插件中的约定对象
build.gradle
apply plugin: 'java' sourceSets.main.output.classesDir = file("$buildDir/output/classes") task show << { println relativePath(compileJava.destinationDir) }
gradle
的输出结果
-q show
> gradle -q show build/output/classes
在上面的示例中,我们应用 Java 插件,除其他外,还做了下列操作:
- 添加了一个新的域对象类型:
SourceSet
- 通过属性的默认(即常规)配置了
main
源码集 - 配置支持使用这些属性来执行工作的任务
所有这一切都发生在apply
这一步过程中。在上面例子中,我们在约定配置被执行之后,修改了类文件所需的位置。在上面的示例中可以注意到,
plugin: "java"compileJava.destinationDir
的值也被修改了,以反映出配置的修改。
考虑一下另一种消费类文件的任务的情况。如果这个任务使用sourceSets.main.output.classesDir
的值来配置,那么修改了这个位置的值,无论它是什么时候被修改,将同时更新compileJava
任务和这一个消费者任务。
这种配置对象的属性以在所有时间内(甚至当它更改的时候)反映另一个对象的任务的值的能力被称为“映射约定”。它可以令
Gradle 通过约定优于配置及合理的默认值来实现简洁的配置方式。而且,如果默认约定需要进行修改时,也不需要进行完全的重新配置。如果没有这一点,在上面的例子中,我们将不得不重新配置需要使用类文件的每个对象。
21.4. 更多关于插件的内容
这一章旨在作为对插件和 Gradle 及他们扮演的角色的导言。关于插件的内部运作的详细信息,请参阅第
58 章,编写自定义插件。
Gradle 1.12用户指南翻译——第二十一章. Gradle 插件的更多相关文章
- Gradle 1.12用户指南翻译——第二十七章. Ear 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十三章. Java 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十八章. Jetty 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十六章. War 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十四章. Groovy 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第46章. Java 库发布插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
随机推荐
- Java中的内存分配
Java程序在运行时,需要在内存中分配空间,为了提高效率,就对空间进行了不同区域的划分,因为每一片区域否有特定的处理数据方式和内存管理方式. 1.栈存储局部变量 2.堆存储new出来的东西 3.方法区 ...
- Node.js 调试器
稳定性: 3 - 稳定 V8 提供了强大的调试工具,可以通过 TCP protocol 从外部访问.Node 内置这个调试工具客户端.要使用这个调试器,以debug参数启动 Node,出现提示: % ...
- Canvas实现3D效果-可旋转的立方体
摘要:Canvas画布是一个二维平面,如何展示出3D效果?通过将三维空间中的Z轴抽取出来,将图像的点投影到与Z轴垂直的平面上,在通过旋转等变换效果,我们就能实现3D效果. 一.建立坐标系 1)立方体坐 ...
- 实例演示如何在spring4.2.2中集成hibernate5.0.2并创建sessionFactory
本文地址:http://blog.csdn.net/sushengmiyan/article/details/49388209 文章作者:苏生米沿 本文目的:使用spring4.2.2集成hibern ...
- EasyUI常用组件(基础)
---------------------------------------------------------------------------------------------------- ...
- iOS使用自签名证书实现HTTPS请求
概述 在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求. 默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向 ...
- WmS详解(一)之token到底是什么?基于Android7.0源码
做Android有些年头了,Framework层三大核心View系统,WmS.AmS最近在研究中,这三大块,每一块都够写一个小册子来介绍,其中View系统的介绍,我之前有一个系列的博客(不过由于时间原 ...
- Java异常处理-----程序中的异常处理.启蒙
1.当除数是非0,除法运算完毕,程序继续执行. 2.当除数是0,程序发生异常,并且除法运算之后的代码停止运行.因为程序发生异常需要进行处理. class Demo { public static vo ...
- ListView之侧滑删除
SwipeMenuListView 是一个为listview添加item侧滑菜单的开源库,项目地址:https://github.com/baoyongzhang/SwipeMenuListView ...
- iOS开发之自己封装的提示框(警告框)样式BHAlertView
最近需要使用到提示框(警告框)进行信息的展示和提醒,所以进行了一个类的封装,想用Swift调用此OC文件,但是发现有些困难,所以暂时先把OC代码进行展示,随后再好好研究一下在Swift中的使用. 对于 ...