Gradle 1.12用户指南翻译——第六十章. 初始化脚本

简介: 其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/1.12。
其他章节的翻译请参见:
http://blog.csdn.net/column/details/gradle-translation.html
翻译项目请关注Github上的地址:
https://github.com/msdx/gradledoc
本文翻译所在分支:
https://github.com/msdx/gradledoc/tree/1.12。
直接浏览双语版的文档请访问:
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。
另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前0.6开发中版本兼容 Android 2.3以上系统,项目地址如下:
https://github.com/msdx/gradle-doc-apk
翻译不易,转载请注明本文在CSDN博客上的出处:

http://blog.csdn.net/maosidiaoxian/article/details/70941864

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

另外,目前Gradle1.12版本的文档已经翻译完并进入校稿阶段,校稿的方式为到该项目https://github.com/msdx/gradledoc 提交issue或是pull request。校稿的结果不只是在此版本更新,也会用于改善Gradle下一版本(2.0)文档的翻译。


第六十章. 初始化脚本

Gradle提供了一种强大的机制,可以让你基于当前的环境自定义构建。这种机制还支持希望与Gradle集成的工具。

60.1. 基本用法

初始化脚本 (也称为init scripts和Gradle的其他脚本类似。然而,这些脚本是在构建之前就运行的。下面是几种可能的用法:

  • 设置一些企业范围的配置,比如在何处查找自定义插件。

  • 设置基于当前环境的属性,比如开发人员的机器与持续集成服务器的属性。

  • 提供构建所需要的有关用户的个人信息,比如仓库或数据库身份验证凭据。

  • 定义机器的一些特定信息,比如JDK的安装位置。

  • 注册构建监听。这对一些希望能够监听Gradle事件的外部工具会很有用。

  • 注册构建logger。你可能希望自定义Gradle对生成的事件的日志打印。

init 脚本的一个主要限制是,它们不能访问buildSrc 项目里的类(该功能的详细信息可参见 第 59.3节,“的buildSrc 项目中的构建源代码”)。

60.2. 使用 init 脚本

有几种方法来使用 init 脚本︰

  • 在命令行上指定一个文件。该命令行选项是-I--init-script ,后面跟上该脚本的路径。这个命令行选项可以出现多次,每次在其后面添加另一个init 脚本.

  • 把一个init.gradle文件放到 USER_HOME/.gradle/ 目录。

  • Put a file that ends with .gradle in the USER_HOME/.gradle/init.d/ directory.

  • 把一个文件名以.gradle结尾的文件放到Gradle 分发包GRADLE_HOME/init.d/ 目录内。这能够使你可以打包一个包含某些自定义构建逻辑和插件的Gradle自定义分发包。你可以结合它与Gradle wrapper作为一种方式,以使自定义逻辑可用于你的企业中的所有构建。

如果Gradle找到了多个init脚本,那么它们将会全部按照以上的顺序执行。而给定目录的脚本,会按照字母顺序执行。这能够使得,比如,一个工具可以在命令行上指定一个init 脚本,并且用户可以放一个初始化脚本到他们的用户目录下用于定义环境,而当Gradle执行的时候,这两个脚本都会运行。

60.3. 写一个 init 脚本

与Gradle构建脚本类似,init 脚本也是一个groovy 脚本。每一个init 脚本都有一个 Gradle 实例与其关联。在这个init 脚本中调用的任何属性引用以及方法,都会委托给这个 Gradle 实例。

每一个初始化脚本也实现了 Script 接口。

60.3.1. 从一个初始化脚本中配置项目

你可以使用一个init 脚本来在构建中配置项目。这与在多项目构建中配置项目的方式类似。下面的例子展示了如何在项目被评估 之前 从一个init 脚本中执行另外的配置。该示例使用此功能来配置额外的仓库,以让它仅用于特定的环境。

示例 60.1. 使用 init 脚本在项目评估之前执行额外的配置

build.gradle

repositories {
    mavenCentral()
}

task showRepos << {
    println "All repos:"
    println repositories.collect { it.name }
}

init.gradle

allprojects {
    repositories {
        mavenLocal()
    }
}

gradle --init-script init.gradle -q showRepos的输出结果

> gradle --init-script init.gradle -q showRepos
All repos:
[MavenLocal, MavenRepo]

60.4. init 脚本的外部依赖

在 第 59.5节,“构建脚本的外部依赖” 中已经解释了,如何向一个构建脚本添加外部依赖。init 脚本同样也可以定义外部依赖。你可以通过使用<c0>initscript()</c0>方法,传入一个定义init 脚本的classpath的闭包。

示例 60.2. 声明构建脚本的外部依赖

init.gradle

initscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.apache.commons', name: 'commons-math', version: '2.0'
    }
}

这个传给initscript() 方法的闭包配置了一个ScriptHandler 实例。你可以通过添加依赖到classpath 配置来定义init 脚本的classpath。这和你定义Java编译classpath是同样的。你可以使用在 第50.4节,“如何定义你的依赖”描述的除了项目依赖之外的任何依赖类型。

声明了init 脚本的classpath之后,你可以使用init 脚本中的类,就像classpath上的任何其他类一样。下面的示例将添加到前面的示例中,并使用init 脚本classpath中的类。

示例 60.3. 具有外部依赖的init 脚本

init.gradle

import org.apache.commons.math.fraction.Fraction

initscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.apache.commons', name: 'commons-math', version: '2.0'
    }
}

println Fraction.ONE_FIFTH.multiply(2)

Output of gradle --init-script init.gradle -q doNothing

> gradle --init-script init.gradle -q doNothing
2 / 5

60.5. Init 脚本插件

与Gradle构建脚本类似,插件也可以应用在 init 脚本上。

示例 60.4. 在 init 脚本中使用插件

init.gradle

apply plugin:EnterpriseRepositoryPlugin

class EnterpriseRepositoryPlugin implements Plugin<Gradle> {

    private static String ENTERPRISE_REPOSITORY_URL = "http://repo.gradle.org/gradle/repo"

    void apply(Gradle gradle) {
        // ONLY USE ENTERPRISE REPO FOR DEPENDENCIES
        gradle.allprojects{ project ->
            project.repositories {

                //remove all repositories not pointing to the enterprise repository url
                all { ArtifactRepository repo ->
                    if (!(repo instanceof MavenArtifactRepository) || repo.url.toString() != ENTERPRISE_REPOSITORY_URL) {
                        project.logger.lifecycle "Repository ${repo.url} removed. Only $ENTERPRISE_REPOSITORY_URL is allowed"
                        remove repo
                    }
                }

                // add the enterprise repository
                maven {
                    name "STANDARD_ENTERPRISE_REPO"
                    url ENTERPRISE_REPOSITORY_URL
                }
            }
        }
    }
}

build.gradle

repositories{
    mavenCentral()
}

 task showRepositories << {
    repositories.each{
        println "repository: ${it.name} ('${it.url}')"
    }
}

gradle -I init.gradle showRepositories 的输出结果

> gradle -q -I init.gradle showRepositories
repository: STANDARD_ENTERPRISE_REPO ('http://repo.gradle.org/gradle/repo')

这个在示例的init 脚本中的插件,确保了当执行构建的时候只使用一个指定的仓库。

当把插件应用在 init 脚本中时,Gradle 会实例化该插件,并调用这个插件的实例的Plugin.apply()方法。然后 gradle 对象会被作为参数传入,用于配置构建的所有方面。当然,所应用的插件也可以作为第 60.4节,“init 脚本外部依赖”中所述的外部依赖被解析。



目录
相关文章
|
6月前
|
存储 缓存 Java
《Gradle构建脚本的基本结构和语法》
《Gradle构建脚本的基本结构和语法》
85 0
|
Java Android开发
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
428 0
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
|
Java API Maven
手把手教你使用Gradle脚本上传代码仓库
手把手教你使用Gradle脚本上传代码仓库
784 0
手把手教你使用Gradle脚本上传代码仓库
|
Java API
Gradle学习基础(3):build脚本基础知识
Gradle学习基础(3):build脚本基础知识
Gradle学习基础(3):build脚本基础知识
|
Java 程序员 开发者
修改gradle脚本,加速spring4.1源码编译构建速度
跳过task来节省时间,例如文档包和源码包,加速编译过程
204 0
修改gradle脚本,加速spring4.1源码编译构建速度
|
Java API Maven
第三章 Gradle构建脚本基础
从这章开始,会对Gradle有一个大概的介绍,帮助大家快速的入门Gradle。本章从整体构建脚本的角度介绍Gradle,什么是Settings文件,他有什么作用;什么是Build文件,它又有什么作用,我们可以新建多少Build文件。
141 0
第三章 Gradle构建脚本基础
|
Java Shell 测试技术
Gradle 构建脚本基础(introductory tutorial)
Projects and tasks 项目和任务 每个 Gradle 构建都由一个或多个项目组成。 一个项目代表什么取决于你在 Gradle 上做什么。 例如,一个项目可能表示一个库 JAR 或一个 web 应用程序。 它可以表示从其他项目生成的 jar 组装起来的发行版 ZIP。 一个项目并不一定代表要构建的东西。 它可能代表要做的事情,比如将应用程序部署到登台或生产环境。 不要担心,如果这看起来有点含糊现在。 Gradle 的按惯例构建支持为项目增加了一个更具体的定义。
130 0
|
XML IDE Java
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
239 0
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
|
Android开发
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(二)
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(二)
205 0
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(二)
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(一)
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(一)
153 0
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(一)