Публикация моментального снимка на oss.jfrog.org с несколькими модулями завершается с ошибкой 403.

Я пытаюсь опубликовать проект с несколькими модулями в Artifexory (oss.jfrog.org). Когда я запускаю ArtifactoryPublish, я получаю ошибку 403, но я знаю, что это не проблема с правами доступа, потому что она работает с одним модулем. Это только не удается опубликовать несколько модулей.

Некоторые модули представляют собой aars, а другие — jar-файлы, и все они содержат исходные коды. Я могу опубликовать их все в Bintray, но не могу опубликовать в Artifactory (для моментальных снимков).

Итак, вопрос в том, как настроить многомодульный проект для публикации моментальных снимков на oss.jfrog.org.

Я понял, что если я изменю его, чтобы опубликовать один модуль, и сделаю имя артефакта таким же, как последняя часть группы, это сработает, но другое имя не сработает (выдает ошибку 403).

Итак, если группа com.example.foo, я могу опубликовать foo.jar (com/example/foo/foo/1.0.0-SNAPSHOT/foo-1.0.0.jar). Но я не могу опубликовать bar.jar (com/example/foo/bar/1.0.0-SNAPSHOT/bar.jar).

Этот градиент включен в каждый проект build.gradle

afterEvaluate {
    publishing {
        publications {
            mavenPublication(MavenPublication) {
                artifact sourcesJar
            if (project.plugins.hasPlugin("com.android.library")) {
                artifact("$buildDir/outputs/aar/${project.name}-debug.aar")
            } else {
                artifact("$buildDir/libs/${project.name}-${version}.jar")
            }
            groupId "com.example.foo"
            artifactId project.name // changing this to "foo" works for a single project
            version version
            pom {
                name.set(project.name)
                url.set(POM_URL)

                packaging POM_PACKAGING
                version version

                licenses {
                    license {
                        name.set(POM_LICENSE_NAME)
                        url.set(POM_LICENSE_URL)
                    }
                }

                developers {
                    developer {
                        name.set(POM_DEVELOPER)
                        }
                    }

                    scm {
                        url.set(POM_SCM_URL)
                        connection.set(POM_SCM_CONNECTION)
                        developerConnection.set(POM_SCM_DEV_CONNECTION)
                    }
                }
            }
        }
    }


    bintray {
        user = project.findProperty('bintrayUser') ?: System.getenv('BINTRAY_USER')
        key = project.findProperty('bintrayApiKey') ?: System.getenv('BINTRAY_API_KEY')
        configurations = ['archives']
        publish = true
        dryRun = true
        pkg {
            name = project.name
            repo = BINTRAY_REPO
            userOrg = BINTRAY_ORG
            licenses = [POM_LICENSE_NAME]
            vcsUrl = POM_SCM_URL
            version {
                name = project.name
                released = new Date()
            }
        }
    }

    artifactory {
        contextUrl = 'http://oss.jfrog.org'
        publish {
            repository {
                repoKey = 'oss-snapshot-local'
                username = project.findProperty('bintrayUser') ?: System.getenv('BINTRAY_USER')
                password = project.findProperty('bintrayApiKey') ?: System.getenv('BINTRAY_API_KEY')
            }
            defaults {
                publications('mavenPublication')
                publishArtifacts = true
                publishPom = true
            }
        }
        resolve {
            repoKey = 'jcenter'
        }
    }
}

person Jamie    schedule 22.06.2020    source источник
comment
в чем собственно твой вопрос? какое это имеет отношение к скрипту gradle? 403 означает, что доступ запрещен, т.е. какая-то ошибка аутентификации. Я не знаю, что вы ожидаете в качестве ответа, кроме как использовать правильные параметры аутентификации.   -  person smac89    schedule 26.06.2020
comment
@ smac89 smac89 Я уточнил вопрос: как настроить многомодульный проект для публикации моментальных снимков на oss.jfrog.org?   -  person Jamie    schedule 29.06.2020


Ответы (1)


Artifactory возвращает ошибку 403 всякий раз, когда вы пытаетесь опубликовать уже существующий артефакт. В вашем случае, если вы ранее публиковали артефакты моментальных снимков из своей сборки с несколькими модулями, всякий раз, когда вы попытаетесь сделать это снова, вы получите 403. Я знаю, что вы можете настроить доступ пользователя, чтобы предоставить разрешения на удаление для используемой вами учетной записи. для развертывания, как указано здесь. Однако перезапись истории не считается хорошей практикой.

Что касается переименования ваших групп и артефактов, я не думаю, что это даст решение, поскольку проблема заключается не в ваших координатах GAV, а в том, что артефакты с соответствующим GAV уже существуют.

Если я могу спросить, почему вы хотите использовать артефакты SNAPSHOT? Разве вы не можете добиться такого же поведения с помощью динамических зависимостей и блокировки зависимостей?

person afterburner    schedule 30.06.2020
comment
Я использую SNAPSHOT, потому что у нас есть новое крупное обновление, которое мы не хотим публиковать в обычном (bintray) источнике, пока мы исправим ошибки. Я думаю, что моя проблема заключалась в настройке раздела defaults в моей артефактной конфигурации для каждого модуля, а не только для корневого build.gradle. Я все еще получаю ошибку 403 при первой публикации, но после этого она работает, поэтому я не совсем понял, но она работает. Также кажется, что я могу публиковать одну и ту же версию несколько раз, поэтому у меня должно быть такое разрешение. Я не вижу способа просмотреть разрешения на oss.jfrog.org, но на bintray это хорошо. - person Jamie; 30.06.2020
comment
Я понимаю. Мы использовали 2 отдельных репозитория Artifactory, один для веток и один для релизных сборок, поэтому мы не смешиваем их и можем просто смотреть на отдельные релизы. - person afterburner; 30.06.2020