如何在Gradle中签署jar文件

时间:2016-09-29 07:17:55

标签: gradle signing jarsigner

我需要签署jar文件。我做了那个应用插件“签名”并添加块符号如下:

apply plugin: 'signing' 
signing {
required { gradle.taskGraph.hasTask("makeService") }
sign configurations.archives
}

最后,我可以添加PGP密钥并对jar进行签名,但是使用.asc(testJar.jar.asc)在jar文件外部进行签名。

但是我在maven中这样做了,它会签署所有课程信息并将符号文件放在meta-inf目录中。

无论如何都要在Gradle中签名?

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

2 个答案:

答案 0 :(得分:2)

//Signing
  // def jarsignerskip = false
  def keystoreFile = new File('urkeystore.jks')
  def keystorepass = 'keystoreP@@S'
  def keyalias = 'selfSigned'

  task signJar(dependsOn: 'jar',description: 'to Sign JAR.',group: 'Build'){

    doLast{
      println ":$project.name:${name}"
      def signdir  = new File("$buildDir/jars/signed")
      signdir.mkdirs()
      ant.signjar(
        destDir: "${signdir.absolutePath}",
                  jar: 'build/jars/*.jar',
                  alias:keyalias,
                  storetype:"jks",
                  keystore:"${keystoreFile.absolutePath}",
                  storepass:keystorepass,
                  verbose:true,
                  preservelastmodified:"true"
      )
    }

  }

它对我有用。

答案 1 :(得分:0)

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

但是你需要一个签名的JAR

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

1)创建私钥

keytool -genkey -alias test_app_alias -validity 3650  -keystore test_app_sign.jks

作为密码,请使用密码123

2)使用您的私钥

签署JAR
jarsigner -keystore test_app_sign.jks -storepass password123 -keypass password123 build/libs/<name>.jar test_app_alias

3)查看生成的文件,检查所有内容是否正确完成。或者运行命令

jarsigner -verify build/libs/<name>.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()
}