публикация aar с использованием плагина maven и kotlin dsl - PullRequest
4 голосов
/ 27 мая 2020

У меня возникают проблемы при попытке использовать maven-publi sh плагин от AS.

Я пробовал этот пример с проектом, и он работает без проблем. Но как только я перехожу на kotlin dsl, у меня возникает такая проблема:

SoftwareComponentInternal with name 'release' not found.

Это мой первый раз, когда я имею дело с kotlin dsl. Во-первых, я не знаю, можете ли вы иметь оба, kotlin dsl и groovy, но я попробовал это в первый раз, просто добавив kotlin dsl к root и app: build.gradle. У меня есть эта ошибка, поэтому я решил также перенести библиотеку на kotlin dsl: mylib: build.gradle. У меня закончился этот код:

plugins {
    id(BuildPlugins.androidLibrary)
    id(BuildPlugins.kotlinAndroid)
    id(BuildPlugins.kotlinAndroidExtensions)
    id(BuildPlugins.mavenPublish)
}

afterEvaluate {
    publishing {
        publications {
            // Creates a Maven publication called "release".
            create<MavenPublication>("release") {
                // Applies the component for the release build variant.
                from(components["release"])
                // You can then customize attributes of the publication as shown below.
                groupId = "com.mylib"
                artifactId = "alpha"
                version = "0.1"
            }
        }
    }
}

Есть идеи об этом и как ее решить?

Ответы [ 2 ]

0 голосов
/ 30 июня 2020

До сих пор я мог использовать это решение при использовании kotlin dsl:

Имейте в виду, что в этом случае опубликованное решение находится в groovy. Но в kotlin dsl это можно сделать без проблем.

Почему это в groovy? Что ж, проблема, которую я начал, когда я включил kotlin dsl в модуль приложения, хотя у меня были groovy файлы gradle в подмодулях (которые я тоже хочу опубликовать sh как библиотеки).

В этом примере я публикую отладочную и выпускную версию.

afterEvaluate {
    publishing {
        publications {
            def groupIdPublication = 'com.mypackage'
            def artifactIdPublication = "util"
            // Creates a Maven publication called "release".
            release(MavenPublication) {
                // Applies the component for the release build variant.
                //from components.release - this is not working

                // You can then customize attributes of the publication as shown below.
                groupId = groupIdPublication
                artifactId = artifactIdPublication
                version = '0.1'
                artifact("$buildDir/outputs/aar/${project.name}-release.aar") // this is the solution I came up with
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    applyDependenciesToPOM(dependenciesNode, configurations.api.allDependencies)
                    applyDependenciesToPOM(dependenciesNode, configurations.implementation.allDependencies)
                }
            }
            // Creates a Maven publication called “debug”.
            debug(MavenPublication) {
                // Applies the component for the debug build variant.
                //from components.debug - this is not working

                groupId = groupIdPublication
                artifactId = artifactIdPublication
                version = 'debug-0.1'
                artifact("$buildDir/outputs/aar/${project.name}-debug.aar") // this is the solution I came up with
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                applyDependenciesToPOM(dependenciesNode, configurations.api.allDependencies)
                applyDependenciesToPOM(dependenciesNode, configurations.implementation.allDependencies)
                }
            }
        }
    }
}

static def applyDependenciesToPOM(Object dependenciesNode, DependencySet allDependencies) {
    allDependencies.each {
        if (it.group != null && (it.name != null && !it.name.equals("unspecified")) &&
                (it.version != null && !it.version.equals("unspecified"))) {
            def dependencyNode = dependenciesNode.appendNode('dependency')
            dependencyNode.appendNode('groupId', it.group)
            dependencyNode.appendNode('artifactId', it.name)
            dependencyNode.appendNode('version', it.version)
        }
    }
}
0 голосов
/ 18 июня 2020

Убедитесь, что вы используете AGP 3.6.0+, поскольку эта конфигурация была добавлена ​​начиная с версии 3.6.0. Документация: https://developer.android.com/studio/build/maven-publish-plugin

...