其他章节的翻译请参见:

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/45390357

关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。

第二十四章. Groovy 插件

Groovy 的插件继承自 Java 插件并添加了对 Groovy 项目的支持。它可以处理 Groovy 代码,以及混合的 Groovy 和 Java 代码,甚至是纯 Java 代码(尽管我们不一定推荐使用)。该插件支持联合编译,可以任意地混合及匹配Groovy
和 Java 代码各自的依赖。例如,一个 Groovy 类可以继承自一个 Java 类,而这个 Java 类也可以继承自一个 Groovy 类。这样一来,我们就能够在项目中使用最适合的语言,并且在有需要的情况下用其他的语言重写其中的任何类。

24.1. 用法

要使用 Groovy 的插件,请在构建脚本中包含以下语句:

示例 24.1. 使用 Groovy 插件

build.gradle

apply plugin: 'groovy'

24.2. 任务

Groovy 的插件向project 中添加了以下任务。

表 24.1. Groovy 插件 - 任务

任务名称 依赖于 类型 描述
compileGroovy compileJava GroovyCompile 编译production 的 Groovy 源文件。
compileTestGroovy compileTestJava GroovyCompile 编译test 的 Groovy 的源文件。
compileSourceSetGroovy compileSourceSetJava GroovyCompile 编译给定的source set 里的 Groovy 源文件。
groovydoc - Groovydoc 为production 里的 Groovy 源文件生成 API 文档。

Groovy 的插件向 Java 插件所加入的 tasks 添加了以下的依赖。

表 24.2. Groovy 插件 - 额外的task 依赖

任务名称 依赖于
classes compileGroovy
testClasses compileTestGroovy
sourceSetClasses compileSourceSetGroovy

图 24.1. Groovy 插件 - tasks


24.3. 项目布局

Groovy 的插件会假定项目的布局如
24.3,“Groovy 插件 - 项目布局”
中所示。所有 Groovy 的源目录都可以包含 GroovyJava
代码。Java 源目录只能包含 Java 源代码。[11]这些目录不一定得存在或是里面包含有什么内容;Groovy
的插件只会进行编译,而不管它发现什么。

表 24.3. Groovy 插件 - 项目布局

目录 意义
src/main/java 产品的Java源代码
src/main/resources 产品的资源
src/main/groovy Production Groovy 源代码。此外可能包含联合编译的 Java 源代码。
src/test/java Java 测试源代码
src/test/resources 测试资源
src/test/groovy Test Groovy 源代码。此外可能包含联合编译的 Java 源代码。
src/sourceSet/java 给定的源集的Java源代码
src/sourceSet/resources 给定的源集的资源
src/sourceSet/groovy 给定的source set 的 Groovy 源代码。此外可能包含联合编译的 Java 源代码。

24.3.1. 更改项目布局

和 Java 插件一样,Groovy 插件允许把 Groovy 的production 和test 的源文件配置为自定义的位置。

示例 24.2. 自定义 Groovy 自定义源文件布局

build.gradle

sourceSets {
    main {
        groovy {
            srcDirs = ['src/groovy']
        }
    }

    test {
        groovy {
            srcDirs = ['test/groovy']
        }
    }
}

24.4. 依赖管理

由于 Gradle 的构建语言基于 Groovy 的,且部分的 Groovy 使用 Groovy 实现,因此 Gradle 已经带有了一个 Groovy 库 (截至 Gradle 1.6所带的 Groovy 库的版本是 1.8.6)。然而,Groovy 项目需要显式地声明一个 Groovy 依赖。这个依赖会在编译和运行的类路径时用到。它还将用于分别获取Groovy 编译器及 Groovydoc 工具。

如果 Groovy 用于production 代码,Groovy 依赖应该添加到compile配置中:

示例 24.3. Groovy 的依赖配置

build.gradle

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.2.0'
}

如果 Groovy 仅用于测试代码,Groovy 的依赖应该被添加到testCompile配置中:

示例 24.4. 配置Groovy 测试依赖

build.gradle

dependencies {
    testCompile "org.codehaus.groovy:groovy-all:2.2.0"
}

如果要使用 Gradle 所带的 Groovy 库,请声明localGroovy()依赖。注意,不同
Gradle 版本附带的 Groovy 版本不同;因此,声明一个固定的 Groovy 依赖要比使用localGroovy()更安全一些。

示例 24.5. 配置捆绑的 Groovy 依赖

build.gradle

dependencies {
    compile localGroovy()
}

Groovy 库不一定得从远程仓库中获取。它也可以获取自本地中可能检入版本控制的lib目录:

示例 24.6. 配置Groovy 文件依赖

build.gradle

repositories {
    flatDir { dirs 'lib' }
}

dependencies {
    compile module('org.codehaus.groovy:groovy:1.6.0') {
        dependency('asm:asm-all:2.2.3')
        dependency('antlr:antlr:2.7.7')
        dependency('commons-cli:commons-cli:1.2')
        module('org.apache.ant:ant:1.9.3') {
            dependencies('org.apache.ant:ant-junit:1.9.3@jar', 'org.apache.ant:ant-launcher:1.9.3')
        }
    }
}

24.5. groovyClasspath
的自动配置

GroovyCompileGroovydoc tasks
会以两种方式使用 Groovy: 在它们的classpath以及它们的groovyClasspath上。前者用于在源代码中查找类的引用,通常会包含
Groovy 库和其他库。后者用来分别加载和执行 Groovy 编译器和 Groovydoc 工具,并且应该只包含 Groovy 库及其依赖项。

除非显式配置了一个 task 的groovyClasspath ,否则
Groovy(基础)插件会尝试推断该 task 的classpath。以如下方式进行:

  • 如果在在classpath中找到groovy-all(-indy) Jar,相同的
    Jar 将添加到groovyClasspath中。
  • 如果在classpath中找到groovy(-indy) Jar
    ,并且该项目已经在至少一个仓库中声明了它,那么相应的groovy(-indy)的仓库依赖将添加到groovyClasspath中。
  • 其他情况,该task 将执行失败,并提示无法推断 groovyClasspath

24.6. 常规属性

Groovy 的插件没有向 project 添加任何的常规属性。

24.7. source
set 属性

Groovy 的插件向 project 的每一个source set 添加了下列的常规属性。你可以在你的构建脚本中,把这些属性当成是source set 对象中的属性一样使用 (见
21.3,“公约”
)。

表 24.4. Groovy 插件 - source set 属性

属性名称 类型 默认值 描述
groovy SourceDirectorySet (read-only) 非空 该source set 中的 Groovy 源文件。包含在 Groovy 源目录中找到的所有的.groovy.java文件,并排除所有其他类型的文件。
groovy.srcDirs Set<File>.
可以使用16.5
章节,"指定一组输入文件"
中所讲到的任何一个来设置。
[projectDir/src/name/groovy] 源目录包含该 source set 中的 Groovy 源文件。此外可能还包含用于联合编译的 Java 源文件。
allGroovy FileTree (read-only) 非空 该source set 中的所有 Groovy 源文件。包含在 Groovy 源目录中找到的所有的.groovy文件。

这些属性由一个GroovySourceSet 的约定对象提供。

Groovy 的插件还修改了一些 source set 的属性:

表 24.5. Groovy 的插件 - source set 属性

属性名称 修改的内容
allJava 添加在 Groovy 源目录中找到的所有.java文件。
allSource 添加在 Groovy 的源目录中找到的所有源文件。

24.8. GroovyCompile

Java 插件向 project 里的每个source set 添加了一个JavaCompile task。这个task
的类型继承自JavaCompile task(见
23.11 节,“CompileJava”
)。除非groovyOptions.useAnt设置为true,否则将使用
Gradle 集成的本地的 Groovy 编译器。对于大多数项目而言,这相比基于 Ant 编译器,是个更好的选择。GroovyCompile task
支持官方的 Groovy 编译器的大多数配置选项。

表 24.6. Groovy 插件 - GroovyCompile 属性

任务属性 类型 默认值
classpath FileCollection sourceSet.compileClasspath
source FileTree.
可以使用16.5
章节,"指定一组输入文件"
中所讲到的任何一种方式来设置。
sourceSet.groovy
destinationDir File. sourceSet.output.classesDir
groovyClasspath FileCollection 如果groovy 配置不为空,则为该配置;否则为 classpath 中找到的
Groovy 库


[11] 我们使用和
Russel Winder 的 Gant 工具同样的约定(http://gant.codehaus.org)。

Gradle 1.12用户指南翻译——第二十四章. Groovy 插件的更多相关文章

  1. Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  2. Gradle 1.12用户指南翻译——第二十六章. War 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  3. Gradle 1.12用户指南翻译——第二十五章. Scala 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  4. Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  5. Gradle 1.12用户指南翻译——第二十八章. Jetty 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  6. Gradle 1.12用户指南翻译——第五十三章. 签名插件

    其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...

  7. Gradle 1.12用户指南翻译——第三十一章. FindBugs 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  8. Gradle 1.12用户指南翻译——第三十七章. OSGi 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  9. Gradle 1.12用户指南翻译——第三十三章. PMD 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

随机推荐

  1. Xcode Organizational Identifiers

    操作系统(不管是iOS或是OS X)使用bundle标识去唯一标识你的应用.Bundle标识由一个组织id和你App的名字组成. 一般的,组织id是你域名的反转.如果你的域名是example.com那 ...

  2. python模块:时间处理模块

    http://blog.csdn.net/pipisorry/article/details/53067168 常用python自带时间处理模块 python自带的时间处理模块参考[操作系统服务:ti ...

  3. 长度为N的数组乱序存放着0带N-1.现在只能进行0与其他数的swap操作,请设计并实现排序,必须通过交换实现排序。

    void sort(int* arr, int len) { if (!arr) { return; } for (int i = 1; i < len; ++i) { while (arr[0 ...

  4. 【伯乐在线】Java线程面试题 Top 50

    本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特 ...

  5. activiti 配置节点 连线信息获取

    1.1.1. 前言 当使用eclipse插件进行流程设计的时候,部署流程之后,我们如何获取我们定义的所有的节点.连线.关口等配置信息呢?有的人看到这个需求,不免窃喜,这不很简单嘛,重新打来bmpn中定 ...

  6. SQLite 表达式(http://www.w3cschool.cc/sqlite/sqlite-expressions.html)

    SQLite 表达式 表达式是一个或多个值.运算符和计算值的SQL函数的组合. SQL 表达式与公式类似,都写在查询语言中.您还可以使用特定的数据集来查询数据库. 语法 假设 SELECT 语句的基本 ...

  7. Android Multimedia框架总结(四)MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52420803 前言:在上篇中,分析了MediaPl ...

  8. Android简易实战教程--第二十九话《创建图片副本》

    承接第二十八话加载大图片,本篇介绍如何创建一个图片的副本. 安卓中加载的原图是无法对其修改的,因为默认权限是只读的.但是通过创建副本,就可以对其做一些修改,绘制等了. 首先创建一个简单的布局.一个放原 ...

  9. 6、Android Content Provider测试

    如果你的应用中使用了Content Provider来与其他应用进行数据交互,你需要对Content Provider进行测试来确保正常工作. 创建Content Provider整合测试 在Andr ...

  10. Cocos2D iOS之旅:如何写一个敲地鼠游戏(五):设置背景

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...