Когда мы распространяем плагин Eclipse, лучше подписывать ваши файлы .jar с помощью jarsigner
в комплекте с JDK. С помощью этого процесса пользователь может установить ваш плагин без предупреждения вот так . В Eclipse wiki у нас есть Страница подписи Jar , но на ней не объясняется подробный способ подписи. Здесь давайте посмотрим, как Gradle может подписывать ваши файлы .jar.
Для подписи jarsigner
, вам нужно Хранилище ключей Java файл, в котором хранится цепочка ключей. Мы можем использовать keytool
для создания самоподписанной подписи, но здесь мы будем использовать Давайте зашифруем , чтобы сгенерировать несамоподписанную подпись.
Сначала следуйте инструкциям Let’s Encrypt, затем вы можете сгенерировать privkey.pem
и fullchain.pem
. Во-вторых, используйте команду openssl
для создания файла .p12 , необходимого для создания хранилища ключей Java. Вот пример:
$ openssl pkcs12 -export \ -in fullchain.pem -inkey privkey.pem \ -out your.p12 \ -name eclipse-plugin
В-третьих, сгенерируйте файл .jks с помощью keytool
команда:
$ keytool -importkeystore \ -srckeystore your.p12 -srcstorepass $SRC_PASS -srcstoretype PKCS12 \ -destkeystore your.jks -deststorepass $DEST_PASS
Мы используем этот файл .jks для подписи, поэтому помните свой $DEST_PASS
. Вам также необходимо сохранить этот файл .jks в секрете. Если вы используете Travis CI, команда encrypt-file – ваш друг.
Хорошо, теперь у нас есть все необходимое, давайте настроим наш файл build.gradle
. Что вам нужно, так это функция для подписи как файлов plugins
jar, так и файлов feature
jar. Сам Groovy не предоставляет функции для подписи, поэтому используйте Задача SignJar муравья вместо этого, как показано ниже:
// sign all .jar file under specified dir ext.signJar = { File dir -> def keystorepass = project.hasProperty('DEST_PASS') ? keystorepass : ''; if (keystorepass.isEmpty()) { print 'to sign eclipse plugins, set "DEST_PASS" project property' return } dir.traverse(type: FILES, nameFilter: ~/.*\.jar$/) { def relativePath = rootDir.toPath().relativize( it.toPath() ) println "signing ${relativePath}" ant.signjar( destDir: it.parentFile, jar: it, alias: 'eclipse-plugin', keystore: "path/to/your.jks", storepass: keystorepass, tsaurl: 'http://timestamp.digicert.com', verbose: true ) } }
Отличная работа! Вы можете просто вызвать эту функцию между jar task и artifacts.xml
генерация файлов ( потому что это artifacts.xml
содержит md5-хэш файлов .jar).
Вот PR, который вводит jarsigner для обнаружения ошибок сборки , вы можете проверить его как рабочее решение. Он использует Gradle 5.0 RC3, но он также должен работать с Gradle 4.
Оригинал: “https://dev.to/kengotoda/sign-eclipse-plugin-by-gradle-4md8”