繁体   English   中英

在Gradle 5中为Android项目使用Maven发布插件

[英]Use of Maven publish plugin for Android project in Gradle 5

我正在尝试构建一个脚本,使用“maven-publish”插件将APK工件发布到Nexus。 在Gradle 4中,可以有这样的配置(这可行):

apply plugin: 'maven-publish'

publishing {
    repositories {
        maven {
            url "https://$MY_NEXUS_SERVER$/repository/${project.version.endsWith('-SNAPSHOT') ? 'snapshots' : 'releases'}"
            credentials {
                username mavenUser
                password mavenPassword
            }
        }
        publications {
            android.applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    if (variant.name == "release") {
                        create("apk${variant.name.capitalize()}", MavenPublication) {
                            groupId project.group
                            artifactId project.name
                            version project.version

                            artifact(output.outputFile)
                        }
                    }
                }
            }
        }
    }
}

在Gradle 5中, 这已不再可能

在尝试构建项目时,我收到此错误:

Cannot create a Publication named 'android' because this container does not support creating elements by name alone. Please specify which subtype of Publication to create. Known subtypes are: MavenPublication

如何重写此代码以与Gradle 5兼容?

我发现了一些有效的东西(相当于我上面的代码示例):

apply plugin: 'maven-publish'

publishing {
    repositories {
        maven {
            url "https://$MY_NEXUS_SERVER$/repository/${project.version.endsWith('-SNAPSHOT') ? 'snapshots' : 'releases'}"
            credentials {
                username mavenUser
                password mavenPassword
            }
        }
        publications {
            create("apkRELEASE", MavenPublication) {
                afterEvaluate {
                    android.applicationVariants.all { variant ->
                        variant.outputs.each { output ->
                            if (variant.name == "release") {
                                groupId project.group
                                artifactId project.name
                                version project.version

                                artifact(output.outputFile)
                            }
                        }
                    }
                }
            }
        }
    }
}

构建任意变体的另一种选择(在Gradle 5.5.1 / Android Gradle 3.5.0上测试):

apply plugin: 'maven-publish'

publishing {
    repositories {
        maven {
            url "https://$MY_NEXUS_SERVER$/repository/${project.version.endsWith('-SNAPSHOT') ? 'snapshots' : 'releases'}"
            credentials {
                username mavenUser
                password mavenPassword
            }
        }
        publications {
            android.applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    "maven${variant.name.capitalize()}Apk"(MavenPublication) {
                        groupId project.group
                        artifactId project.name
                        version project.version

                        artifact(output.outputFile)
                    }
                }
            }
        }
    }
}

使用调试变量构建时生成的发布任务示例: publishMavenDebugApkPublicationToMavenRepository

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM