如何在Gradle中对jar文件进行签名

如何在Gradle中对jar文件进行签名,gradle,signing,jarsigner,Gradle,Signing,Jarsigner,我需要在jar文件上签名。我使用插件“签名”并添加块签名,如下所示: apply plugin: 'signing' signing { required { gradle.taskGraph.hasTask("makeService") } sign configurations.archives } 最后,我可以添加PGP密钥并对jar进行签名,但它是在jar文件外部用.asc(testJar.jar.asc)进行签名的 但是我在maven中这样做了,它对所有类信息进行签名,并将签名文件

我需要在jar文件上签名。我使用插件“签名”并添加块签名,如下所示:

apply plugin: 'signing' 
signing {
required { gradle.taskGraph.hasTask("makeService") }
sign configurations.archives
}
最后,我可以添加PGP密钥并对jar进行签名,但它是在jar文件外部用.asc(testJar.jar.asc)进行签名的

但是我在maven中这样做了,它对所有类信息进行签名,并将签名文件放在meta inf目录中

在格拉德尔有这样的签名吗


请帮助我尝试过谷歌搜索,论坛无法获得任何信息。

ASC用于数字签名存档以供发布

但是你需要一个签名的罐子

首先,在控制台中执行此操作:

1) 创建私钥

keytool -genkey -alias test_app_alias -validity 3650  -keystore test_app_sign.jks
jarsigner -keystore test_app_sign.jks -storepass password123 -keypass password123 build/libs/<name>.jar test_app_alias
使用password123作为密码

2) 使用您的私钥对JAR进行签名

keytool -genkey -alias test_app_alias -validity 3650  -keystore test_app_sign.jks
jarsigner -keystore test_app_sign.jks -storepass password123 -keypass password123 build/libs/<name>.jar test_app_alias
jarsigner-keystore test\u app\u sign.jks-storepass password123-keypass password123 build/libs/.jar test\u app\u别名
3) 通过查看结果文件,检查所有操作是否正确完成。或者运行命令

jarsigner -verify build/libs/<name>.jar
jarsigner-验证build/libs/.jar
在build.gradle中添加代码。例如:

jar << {
    def passwd = "password123"
    def app_alias = "test_app_alias"
    def jks_file = "test_app_sign.jks"

    def exec_line = "jarsigner -keystore " + jks_file + " -storepass " +
        passwd + " -keypass "+ passwd + " " + jar.archivePath + " " + app_alias
    print  exec_line
    exec_line.execute()
}
jar

这对我来说很有用。

真的没有声明性的方法来做这件事吗?别忘了,如果签名失败,jar文件必须删除,否则在下一次构建运行时,Gradle肯定会认为它是最新的,不会再次签名。如果你想在每个构建中都对jar进行签名,请在最后添加
build.dependsOn signJar