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 脚本外部依赖”中所述的外部依赖被解析。



目录
相关文章
|
存储 缓存 Java
《Gradle构建脚本的基本结构和语法》
《Gradle构建脚本的基本结构和语法》
159 0
|
Java Android开发
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
560 0
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
|
8月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
430 0
|
Java API Maven
手把手教你使用Gradle脚本上传代码仓库
手把手教你使用Gradle脚本上传代码仓库
939 0
手把手教你使用Gradle脚本上传代码仓库
|
Java API
Gradle学习基础(3):build脚本基础知识
Gradle学习基础(3):build脚本基础知识
Gradle学习基础(3):build脚本基础知识
|
Java 程序员 开发者
修改gradle脚本,加速spring4.1源码编译构建速度
跳过task来节省时间,例如文档包和源码包,加速编译过程
253 0
修改gradle脚本,加速spring4.1源码编译构建速度
|
Java API Maven
第三章 Gradle构建脚本基础
从这章开始,会对Gradle有一个大概的介绍,帮助大家快速的入门Gradle。本章从整体构建脚本的角度介绍Gradle,什么是Settings文件,他有什么作用;什么是Build文件,它又有什么作用,我们可以新建多少Build文件。
187 0
第三章 Gradle构建脚本基础
|
XML IDE Java
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
309 0
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
|
Android开发 C++
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
165 0
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
|
Android开发
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(二)
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(二)
255 0
【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )(二)

热门文章

最新文章