在Gradle中限制对jar包签名时机

26 4月

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/04/26/only-sign-for-release/

Maven仓库是一个包含大量依赖库的地方,有时候我们需要发布自己的库到仓库。

仓库虽然对于发布的库的具体功能和作用没有太多要求,但是有一些强制要求是必须的。

发布的内容物可以是jar,aar等,但是都必须满足一下条件:

  • Metadata(pom.xml)
  • 签名
  • source jar
  • javadoc jar

Gradle自身包含了mvn插件和signing插件,所以整个工作还是比较简单的,大体配置如下:

signing {
required {
isReleaseVersion && gradle.taskGraph.hasTask("uploadArchives")
}
signconfigurations.archives
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier ='javadoc'from'build/docs/javadoc'
}
task sourcesJar(type: Jar) {
classifier ='sources'fromsourceSets.main.allSource
}

如果是快照版本就会发布到snapshot仓库,否则就是staging库。

对于快照版本是不需要签名的,所以在操作中尽量快照版本不签名,一来是节约时间,二来是快照版本如果通过CI发布的,就可以省去很多事。

signing插件的配置中通过指定required来决定是否跳过签名。

可以通过以下代码来判断

ext.isReleaseVersion = !version.endsWith("SNAPSHOT") signing {
required {
isReleaseVersion && gradle.taskGraph.hasTask("uploadArchives")
}
sign configurations.archives
}

当然如果你的CI中有特殊的环境变量,也可以加入判断中。

比如SnapCI中的环境变量有

$ exportSNAP_CI=true
$ exportCI=true
$ exportSNAP_CACHE_DIR=/var/go
$ exportLANG=en_US.UTF-8
$ exportLC_ALL=en_US.UTF-8
$ exportSNAP_WORKING_DIR=/var/snap-ci/repo
$ exportSNAP_PIPELINE_COUNTER=12
$ exportSNAP_STAGE_NAME=upload
$ exportSNAP_BRANCH=master
$ exportSNAP_COMMIT=768980f107b8757812f23a934979549e40977c3d
$ exportSNAP_COMMIT_SHORT=768980f
$ exportSNAP_TRACKING_PIPELINE=true
$ exportSNAP_INTEGRATION_PIPELINE=false

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/04/26/only-sign-for-release/

发表评论

您的电子邮箱地址不会被公开。