#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 наверняка подумает, что он обновлен, и не подпишет его снова.