其他章节的翻译请参见:
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.5版本兼容 Android 2.3以上系统,项目地址如下:
https://github.com/msdx/gradle-doc-apk
翻译不易,转载请注明本文在CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/54292923

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

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

第五十三章. 签名插件

签名插件添加了对构件的文件和artifacts进行数字签名的功能。这些数字签名可以用于证明使用这个签名的artifact是谁构建的,以及其他的信息,比如签名是什么时候生成的。

签名插件目前只提供了生成PGP 签名的支持(这是发布到Maven 中央库所需的签名格式)。

53.1. 用法

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

示例 53.1. 使用Signing插件

build.gradle

apply plugin: 'signing'

53.2. 签名凭证

为了创建 PGP 签名,你将需要一个密钥对(有关使用GnuPG 工具创建密钥对的介绍可以在GnuPG Howto中找到)。您需要向签名插件提供你的关键信息,即如下三项信息:

  • 公钥 ID (一个8位字符的十六进制字符串)。

  • 指向包含了你的私钥的密钥环文件的绝对路径。

  • 用来保护你的私钥的密码。

这些条目必须分别作为属性项目signing.keyId、 signing.passwordsigning.secretKeyRingFile 进行提供。鉴于这些值的个人和私人性质,一个好的做法是将它们保存在用户的gradle.properties文件(第14.2 节,“Gradle 属性和系统属性”中所述)。

signing.keyId=24875D73
signing.password=secret
signing.secretKeyRingFile=/Users/me/.gnupg/secring.gpg

如果在用户的gradle.properties文件中指定的信息不适合你的环境,你可以提供这些信息,但你需要手动设置项目的属性。

import org.gradle.plugins.signing.Sign

gradle.taskGraph.whenReady { taskGraph ->
    if (taskGraph.allTasks.any { it instanceof Sign }) {
        // Use Java 6's console to read from the console (no good for a CI environment)
        Console console = System.console()
        console.printf "\n\nWe have to sign some things in this build.\n\nPlease enter your signing details.\n\n"

        def id = console.readLine("PGP Key Id: ")
        def file = console.readLine("PGP Secret Key Ring File (absolute path): ")
        def password = console.readPassword("PGP Private Key Password: ")

        allprojects { ext."signing.keyId" = id }
        allprojects { ext."signing.secretKeyRingFile" = file }
        allprojects { ext."signing.password" = password }

        console.printf "\nThanks.\n\n"
    }
}

53.3. 指定要签名的内容

除了配置内容要如何签名(即签名配置),你还必须指定哪些文件要签名。Signing 插件提供了一个DSL,它允许你指定应签名的任务及配置。

53.3.1. 签名配置

签名一个配置的artifacts是很常见的情况。例如, Java 插件配置了构建一个jar文件,并且把 jar 文件添加到archives配置。使用Signing DSL,你可以指定这个配置的所有 artifacts 都应该被签名。

53.3.2. 签名一个配置

build.gradle

signing {
    sign configurations.archives
}

这将在你的项目中创建一个名为“signArchives”的任务(Sign类型),这个任务会构建任何archives的artifacts(如果需要),然后为它们生成签名。签名文件将和被签名的artifacts放在一起。

示例 53.3. 签署一个配置的输出

gradle signArchives的输出结果

> gradle signArchives
:compileJava
:processResources
:classes
:jar
:signArchives

BUILD SUCCESSFUL

Total time: 1 secs

53.3.2. 签名任务

在某些情况下,你需要签名的artifact 可能不是配置的一部分。在这种情况下,你可以直接签名生成了要签名的artifact 的任务。

53.4. 签名一个任务

build.gradle

task stuffZip (type: Zip) {
    baseName = "stuff"
    from "src/stuff"
}

signing {
    sign stuffZip
}

这将在您的项目创建一个名为“signStuffZip”的(Sign类型) 的任务,这个任务会构建输入任务的archive(如果需要),并进行签字。签名文件将和被签名的 artifact 放在一起。

示例 53.5. 签名一个任务的输出

gradle signStuffZip的输出结果

> gradle signStuffZip
:stuffZip
:signStuffZip

BUILD SUCCESSFUL

Total time: 1 secs

一个“可签名”的任务,必须输出某种类型的archive。这样的任务有 Tar, Zip, Jar, War 及 Ear任务。

53.3.3. 有条件的签名

常见的使用模式是只在一定条件下签名构建的artifacts。例如,你可能不想对非发布版本签名artifacts。要做到这一点,你可以指定只在一定条件下才要求签名。

53.6. 有条件的签名

build.gradle

version = '1.0-SNAPSHOT'
ext.isReleaseVersion = !version.endsWith("SNAPSHOT")

signing {
    required { isReleaseVersion && gradle.taskGraph.hasTask("uploadArchives") }
    sign configurations.archives
}

在此示例中,我们只想要在我们构建一个我们即将去发布的发布版本的时候,才进行签名。由于我们正在检查任务图,以确定是否打算发布,我们必须将signing.required属性设置为一个闭包以推迟evaluation。更多的信息,请参阅SigningExtension.setRequired()

53.4. 发布签名

当通过 Signing DSL指定什么要被签名的时候,生成的signature会自动地加入到 signatures 和 archives 的依赖配置中。这意味着,如果你想要将你的签名以及artifacts上传到你的分布仓库中,正常来讲你只需要执行uploadArchives任务。

53.5. 签名 POM 文件

当为你的artifacts部署签名到 Maven 仓库时,你还想签名发布的 POM 文件。签名插件添加了一个signing.signPom() (请参见: SigningExtension.signPom())方法,这个方法可以在你的上传任务配置的beforeDeployment()块中使用。

示例 53.7. 为部署签名 POM

build.gradle

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
        }
    }
}

当不需要签名,以及由于缺少配置(即没有签名证书)而不能签名 POM 的时候,signPom()方法将什么都不会做,并且不会进行任何的提示。

Gradle 1.12用户指南翻译——第五十三章. 签名插件的更多相关文章

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

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

  2. Gradle 1.12用户指南翻译——第五十一章. 发布构件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...

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

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

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

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

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

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

  6. Gradle 1.12用户指南翻译——第二十四章. Groovy 插件

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

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

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

  8. Gradle 1.12用户指南翻译——第四十三章. 构建公告插件

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

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

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...

随机推荐

  1. requests-post请求

    post与get方法的区别在于post需要提交一些数据以备处理. 在requests里面非常简单,headers,data都是直接加进去就可以了 # requests.post提交表单# 有些网站使用 ...

  2. equals方法的编写建议

    1.显示参数命名为 otherObject ,稍后需要将其转换成另一个叫做 other 的变量. 2.检测 this 与 otherObject 是否引用同一个对象: //这条语句只是一个优化.计算这 ...

  3. jQuery系列 第八章 jQuery框架Ajax模块

    第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...

  4. java中关于&、&&、|、||之间的区别和运算

    关于&.&&.|.||之间的区别和运算 在逻辑运算中: 普通与&:要判断所有的判断的条件 短路与&&:如果前面一个判断条件出现false,则后续的判断条 ...

  5. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  6. Mysql查询小作业

    数据准备drop table if exists class;create table class(    class_no int(2) unsigned zerofill primary key ...

  7. PHPCMS v9.6.0 任意用户密码重置

    参考来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173130.html 他分析的好像不对.我用我的在分析一次. 先来看poc: /inde ...

  8. jenkins构建个人github上的项目

    最近刚进一家新公司,公司采用的是自动化集成测试工具jenkins进行,构建,部署项目 因为以前,没接触过这类工具,所以打算在自己本机安装一个jenkins进行学习 具体安装步骤,很简单,不做讲解 1. ...

  9. 2015 多校联赛 ——HDU5302(构造)

    Connect the Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  10. bzoj 4448: [Scoi2015]情报传递

    Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有)下线,除1名大头日外其余n-1名情报员有且仅有1名上线.奈 ...