Gradle подписывает публикации библиотеки Android: невозможно выполнить задачу подписи, поскольку у нее нет настроенной подписи

Прошли часы, и я застрял, пытаясь опубликовать/выпустить подписанные артефакты на Maven Central.

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

Итак, после добавления этой строки: sign publishing.publications.release для подписи публикаций я получил эту ошибку при выполнении следующей задачи: publishReleasePublicationToMavenCentralRepository:

Не удается выполнить задачу подписания ':xxx:signReleasePublication', так как для нее не настроена подписывающая сторона

Оболочка Gradle: 7.1.1.
build.gradle (уровень библиотеки):

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'signing'
apply plugin: 'maven-publish'

repositories {
    mavenCentral()
    google()
    jcenter()
    maven { url "https://jitpack.io" }
}

android {
    compileSdkVersion 30
    buildToolsVersion "29.0.3"


    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 9
        versionName "1.1.4"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
// Because the components are created only during the afterEvaluate phase, you must
// configure your publications using the afterEvaluate() lifecycle method.

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                groupId = 'xxxx'
                artifactId = 'xxx'
                version = '1.1.4'
                from components.release
                signing {
                    useInMemoryPgpKeys(
                            properties.getProperty('signing.keyId'),
                            properties.getProperty('signing.secretKeyRingFile'),
                            properties.getProperty('signing.password')
                    )
                    sign publishing.publications.release //It's after adding this specific line that I got the error of no configured signatory 
                    sign configurations.archives
                }
                pom {
                    //I also tried to put the signing block here but nothing changes
                    name = 'xxx'
                    description = 'xxx'
                    url = 'xxx
                    licenses {
                        license {
                            name = 'MIT License'
                            url = 'https://opensource.org/licenses/MIT'
                        }
                    }
                    developers {
                        developer {
                            id = 'xxx'
                            name = 'xxx'
                            email = 'xxx'
                        }
                    }
                    scm {
                        connection = 'scm:git:git://github.com/xxx'
                        developerConnection = 'scm:git:ssh://github.com/xxx'
                        url = 'https://github.com/xxx'
                    }
                }
            }
        }
        repositories {
            maven {
                // change URLs to point to your repos, e.g. http://my.org/repo
                //def releasesRepoUrl = layout.buildDirectory.dir('repos/releases')
                //def snapshotsRepoUrl = layout.buildDirectory.dir('repos/snapshots')
                url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
                credentials {
                    username = properties.getProperty('ossrhUsername')
                    password = properties.getProperty('ossrhPassword')
                }
            }
        }
    }
}

Я увидел вопрос, на который здесь нет ответа, и получил точно такую ​​же ошибку: Gradle build настроенный подписант < /а>

РЕДАКТИРОВАТЬ: Вот мой gradle.properties, расположенный под ~/.gradle/:

mavenCentralUsername=xxx
mavenCentralPassword=xxx
signing.keyId=xxx
signing.password=xxx
signing.secretKeyRingFile=xxx
ossrhUsername=xxx
ossrhPassword=xxx

РЕДАКТИРОВАТЬ: Чтобы было ясно: я добавил эту строку, потому что, когда я пытаюсь закрыть публикацию после ее публикации без этой строки, я получаю ошибку подписи в репозитории Nexus: введите здесь описание изображения


person Itoun    schedule 19.07.2021    source источник
comment
На ваш связанный вопрос есть по крайней мере один многообещающий ответ: stackoverflow.com/a/67115705/150978 Создали ли вы необходимые ключи GnuPG для подписи и настроили их, как показано в этом ответе? central.sonatype.org/publish/requirements/gpg   -  person Robert    schedule 23.07.2021
comment
Привет Роберт, конечно я сделал. Очевидно, я перепробовал все ответы, которые нашел, включая ответы на вопрос, который я связал.   -  person Itoun    schedule 23.07.2021


Ответы (1)


Наконец-то я смог опубликовать и выпустить свой репозиторий с моими подписанными артефактами!

Что было не так:
Я использовал useInMemoryPgpKeys (я не должен был)
Я никогда не распространял свой gpg key ни на один сервер

поэтому для этого я просто сделал следующее:

gpg --keyserver keys.openpgp.org --send-keys yourKey

Центральные серверы поддерживают 3 сервера:

keyserver.ubuntu.com
keys.openpgp.org
pgp.mit.edu

Но я советую загружать на openpgp, потому что ubuntu не работает (когда я закрыл репозиторий на Nexus, я получил сообщение об ошибке, в котором говорилось, что ключ не найден ни на одном сервере).

чтобы узнать свой ключ, просто запустите:

gpg --list-keys

и ваш ключ должен выглядеть так: CA925CD6C9E8D064FF05B4728190C4130ABA0F98

Итак, мой окончательный build.gradle:

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
// Because the components are created only during the afterEvaluate phase, you must
// configure your publications using the afterEvaluate() lifecycle method.

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                groupId = 'xxx'
                artifactId = 'xxx'
                version = mVersionName
                pom {
                    signing {
                        sign publishing.publications.release
                        sign configurations.archives
                    }
                    name = 'WeLoop'
                    description = 'xxx'
                    url = 'xxx'
                    licenses {
                        license {
                            name = 'MIT License'
                            url = 'https://opensource.org/licenses/MIT'
                        }
                    }
                    developers {
                        developer {
                            id = 'xxx'
                            name = 'xxx'
                            email = 'xxx'
                        }
                    }
                    scm {
                        connection = 'scm:git:git://github.com/xxx.git'
                        developerConnection = 'scm:git:ssh://github.com/xxx'
                        url = 'https://github.com/xxx'
                    }
                }
            }
        }
        repositories {
            maven {
                url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
                credentials {
                    username = properties.getProperty('mavenCentralUsername')
                    password = properties.getProperty('mavenCentralPassword')
                }
            }
        }
    }
}

и мой последний ~/.gradle/gradle.properties:

mavenCentralUsername=xxx
mavenCentralPassword=xxx
signing.keyId=xxx
signing.password=xxx
signing.secretKeyRingFile=/xxx/secring.gpg
person Itoun    schedule 23.07.2021