Неразрешенная ссылка из зависимости gradle maven через s3 - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь опубликовать библиотеку в частном репозитории S3 maven.Загрузка защищена паролем, но для загрузки библиотека открыта для общественности.Файл aar загружается без проблем (вместе с pom / md5 / sha1), и я могу видеть его в моем S3-контейнере, загружать его и даже вручную добавлять этот aar как зависимость от моего проекта.Однако, когда я загружаю эту зависимость следующим образом:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "http://myrepo.com" }
}

//in the project's build.gradle
implementation 'com.mylib:mylib:0.1.1'

... возникает проблема.Gradle Sync завершается без проблем, и похоже, что AAR был загружен, но он никогда не появляется в разделе «Внешние библиотеки» в Android Studio, и код недоступен (Unresolved reference: MyLib).

Конечно, я пытался восстановить, сделать недействительными кэши и применить их к другому проекту.

Есть идеи, как заставить это работать?

Вот какопубликовать код выглядит.

android.libraryVariants.all { variant ->

    if (variant.buildType.name == "release" && variant.flavorName == "prod") {

        variant.outputs.all { output ->

            publishing.publications.create(variant.name, MavenPublication) {

                artifact source: output.outputFile, classifier: output.name

                pom.withXml {
                    def dependencies = asNode().appendNode('dependencies')

                    configurations.getByName(variant.name + "CompileClasspath").allDependencies
                            .findAll { it instanceof ExternalDependency }
                            .each {
                        def dependency = dependencies.appendNode('dependency')

                        dependency.appendNode('groupId', it.group)
                        dependency.appendNode('artifactId', it.name)
                        dependency.appendNode('version', it.version)

                    }
                }
            }
        }

    }
}

tasks.all { task ->
    if (task instanceof AbstractPublishToMaven) {
        task.dependsOn assemble
    }
}

publishing {

    Properties properties = new Properties()
    properties.load(file('maven.properties').newDataInputStream())

    def user = properties.getProperty("maven.user")
    def password = properties.getProperty("maven.password")

    repositories {
        maven {
            url "s3://myrepo.com/"
            credentials(AwsCredentials) {
                accessKey user
                secretKey password
            }
        }
    }
}

1 Ответ

0 голосов
/ 15 июня 2018

Очевидно, что эти плагины развертывания (как этот, так и bintray) сталкиваются с некоторыми серьезными трудностями, когда задействованы различные варианты.Я не знаю специфики, но это как-то связано с тем, что они пытаются разрешить имена артефактов на основе имен файлов.Эта строка:

artifact source: output.outputFile, classifier: output.name

является причиной, по которой мои артефакты были названы, например, com/mylib/mylib/0.1.1/mylib-0.1.1-prod-release.aar.Каким-то образом это не может быть распознано при загрузке зависимостей из maven.Изменение этой строки на:

artifact source: output.outputFile, classifier: null

делает файл похожим на com/mylib/mylib/0.1.1/mylib-0.1.1.aar, что, очевидно, нормально.

Я понятия не имею, почему не работает первый стиль именования, яПредположим, что существует параметр, который распространяет его на метаданные.В этом вопросе все еще есть щедрость, так что, может быть, кто-то может разгадать эту загадку?

...