Я никогда раньше этого не делал. Этот проект предназначен для тестирования. Когда я выясню,
как правильно опубликовать проект, я опубликую настоящую библиотеку.
Моя цель — иметь возможность добавить этот проект в качестве зависимости для других проектов.
Я знаю Я мог бы включить его как .jar, но хочу узнать о других способах импорта зависимостей.
При выполнении задачи:
Код: Выделить всё
./gradlew publish
Код: Выделить всё
> Task :signMavenJavaPublication FAILED
Caching disabled for task ':signMavenJavaPublication' because:
Build cache is disabled
Task ':signMavenJavaPublication' is not up-to-date because:
Task has failed previously.
:signMavenJavaPublication (Thread[Execution worker for ':',5,main]) completed. Took 0.004 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':signMavenJavaPublication'.
> Cannot perform signing task ':signMavenJavaPublication' because it has no configured signatory
Я добился некоторого прогресса. Я опубликую это внизу вопроса.
Последние четыре дня я пытался понять, почему. Код сборки я опубликую ниже, но сначала я пройду все шаги, которые я выполнил, чтобы иметь возможность публиковать в центральном репозитории.
Мой опыт работы с Gradle ограничен, но я думаю, что знаю основы.
Я прочитал различную документацию на:
central.sonatype.org
Gradle
о том, как публиковать/подписывать. Я не знаю точно, что я делаю и почему.
- Подайте заявку на получение GroupID в Sonatype Jira. Эта проблема/заявка решена. И я должен иметь возможность публиковать SNAPSHOT и публиковать артефакты на s01.oss.sonatype.org. Мой GroupID — это мой домен GitHub. Насколько мне известно, это позволяет мне публиковать свои проекты/библиотеки под именем «io.github.username».
- Загрузите и настройте GnuPG:
Не помню когда.
Код: Выделить всё
gpg --gen-key
Код: Выделить всё
gpg -K
Код: Выделить всё
sec ed25519 2022-05-25 [SC] [expires: 2024-05-24]
****************************************
uid [ultimate] My Name
ssb cv25519 2022-05-25 [E] [expires: 2024-05-24]
Теперь я экспортирую ключ. (Я думаю, это создает мой секретный ключ, верно?):
Код: Выделить всё
gpg --export-secret-keys ******** > C:\users\username\secring.gpg
Код: Выделить всё
signing.secretKeyRingFile=\users\username\secring.gpg
И как правильно это вводить?
Код: Выделить всё
signing.secretKeyRingFile=\users\username\secring.gpg
signing.secretKeyRingFile=C:\users\username\secring.gpg
signing.secretKeyRingFile=C:\\users\\username\\secring.gpg
signing.secretKeyRingFile="C:\\users\\username\\secring.gpg"
Затем мне нужно отправить открытый ключ на какой-нибудь сервер ключей. И есть несколько альтернатив:
- keyserver.ubuntu.com
- keys.openpgp.org
- pgp.mit.edu
Код: Выделить всё
gpg --keyserver hkp://keyserver.ubuntu.com --send-keys ****************************************
Код: Выделить всё
gpg --keyserver hkp://keyserver.ubuntu.com --search-key 'my-email@mail.com'
- Итак, на этом этапе я настроил простой Java-тест. проект под названием «Хранилище». Переношу его в свой репозиторий на GitHub. под тем же именем.

- И теперь мы можем добраться до файлов Gradle. Имейте в виду, я не совсем уверен, правильно ли это. Если я что-то упустил, или что-то ненужно. Пожалуйста, дайте мне знать.
Код: Выделить всё
plugins {
id 'java-library'
id 'signing'
id 'maven-publish'
}
group 'io.github.username'
version '0.0.1'
repositories {
mavenCentral()
maven { url "http://repo.maven.apache.org/maven2" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {}
java {
withJavadocJar()
withSourcesJar()
}
publishing {
publications {
mavenJava(MavenPublication) {
groupId = 'io.github.username'
artifactId = 'storage'
version = '0.0.1'
from components.java
pom {
name = 'Storage'
description = 'Storage is an open-source Java library test'
url = 'https://github.com/username/Storage'
inceptionYear = '2022'
licenses {
license {
name = 'MIT License'
url = 'http://www.opensource.org/licenses/mit-license.php'
}
}
developers {
developer {
id = 'sonatype-username'
name = 'Full Name'
email = 'my-email@mail.com'
}
}
scm {
connection = 'scm:git:git://github.com/username/Storage.git'
developerConnection = 'scm:git:ssh://github.com/username/Storage.git'
url = 'https://github.com/username/Storage'
}
}
}
}
repositories {
maven {
name = "OSSRH"
url = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = project.properties["ossrhUsername"]
password = project.properties["ossrhPassword"]
}
}
}
}
signing {
sign publishing.publications.mavenJava
}
javadoc {
if(JavaVersion.current().isJava9Compatible()) {
options.addBooleanOption('html5', true)
}
}
Код: Выделить всё
# auto-generated
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# Sonatype variables
ossrhUsername=username
ossrhPassword=password
# GnuPG
signing.keyId=********
singing.password=GnpPassword
signing.secretKeyRingFile=\Users\username\secring.gpg
Код: Выделить всё
rootProject.name = 'Storage'
- ОС Windows 10
- GnuPG 2.3.6
Gradle 7.4.2 - Java 13.0.1
- Groovy 3.0.9
Я опубликовал проект в менеджере репозитория Nexus.
Так что я знаю тот факт, что build.gradle может получить доступ к моему файлу gradle.properties и прочитать его содержимое.
Я выполнил задачу публикации, исключив часть подписи.
Я отправил свой ключ (теперь два ключа) обоим:
- keyserver.ubuntu.com
pgp.mit.edu
Когда я отправляю ключ на сервер, я использую ПОЛНЫЙ идентификатор ключа.
Я могу запросить сервер, чтобы узнать, действительно ли он получил ключи: gpg --keyserver hkp://keyserver.ubuntu.com --search-key 'my-email@mail.com'
И оба сервера получили по 2 ключа:
Код: Выделить всё
(1) My Name
263 bit EDDSA key ****************, created: 2022-05-28
(2) My Name
263 bit EDDSA key ****************, created: 2022-05-25
Keys 1-2 of 2 for "my-email@mail.com". Enter number(s), N)ext, or Q)uit >
И Singing.password, который я использую, тот же, что и при создании ключа.
Но по какой-то эзотерической причине. Подписание по-прежнему не работает. Нет ли способа определить ТОЧНУЮ причину сбоя?
Пожалуйста, взгляните на мой build.gradle. Есть ли альтернативный способ публикации/подписания, который я мог бы попробовать?
Имеет ли значение имя файла секретного ключа? secring.gpg
Подробнее здесь: https://stackoverflow.com/questions/724 ... red-signat