Как подписать файл jar в Gradle

#gradle #signing #jarsigner

#gradle #подписание #jarsigner

Вопрос:

Мне нужно подписать файл jar. Я сделал это, применив плагин «подписание» и добавив знак блока, как показано ниже:

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

В конце я могу добавить ключи PGP и подписать jar, но он подписан вне файла jar с помощью .asc (testJar.jar.asc).

Но я сделал это в maven, он подписывает всю информацию о классе и помещает файлы подписи в каталог meta-inf.

Есть ли в любом случае такая подпись в Gradle?

Пожалуйста, помогите, я пробовал поискать в Google и на форумах, но не смог получить никакой информации.

Комментарии:

1. Действительно ли нет декларативного метода для этого?

Ответ №1:

 //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. Если вы хотите, чтобы jars подписывались при каждой сборке, добавьте build.dependsOn signJar в конце.

Ответ №2:

ASC используется для цифровой подписи архива для публикации.

Но там вам нужен подписанный JAR

Сначала сделайте это в консоли:

1) Создайте закрытый ключ

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

В качестве пароля используйте password123

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()
}
  

Комментарии:

1. Не забывайте, что в случае сбоя подписи файл jar должен быть удален, иначе при следующем запуске сборки Gradle наверняка подумает, что он обновлен, и не подпишет его снова.