Android-多个AAR变体Nexus上传

时间:2018-11-01 00:21:19

标签: android gradle module android-gradle nexus

我有一个结构如下的项目。它具有一个“ main-module”,这是我们开发的重点,它应该能够将两个变体(调试,发布)的AAR发布到Nexus。我们还有很多其他依赖项模块和一个测试应用程序。

project | |- app |- main-module |- module-a |- module-b ...

我正在寻找一个将main-module AAR打包的版本,然后将它们都上传到Nexus存储库。调试AAR将进入快照存储库,发行版本将进入发行库。我有一些拼图,但是我不确定如何将它们绑在一起。

我所拥有的:

构建AAR

gradlew assemble

发布AAR

project.uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {
            authentication(userName: "deployment", password: "password123")
        }
        pom.version = "0.0.1-SNAPSHOT"
        pom.artifactId = "MainModule"
        pom.groupId = "com.myorg.test"
    }
}

该版本有效,我可以将版本推送到Nexus。我不知道如何为调试和发布版本提供配置,因此它们具有正确的存储库(例如/snapshots/release)和正确的版本(发布版本名称将不包含{{1 }}。

工作后,我会将名称,版本和凭据移到属性中,在有人指出之前,不要将凭据签入源代码管理。

使用:

  • gradle-wrapper 4.4
  • gradle插件3.1.4

1 个答案:

答案 0 :(得分:0)

因此,经过几天的挖掘,我找到了解决方案。这很粗糙,我尚未对其进行优化,但是该解决方案有效。请注意,假设您的aar文件名称中包含文本“ debug”和“ release”,如果没有,则可以调整项目。我不知道这如何适用于不仅具有调试和发布变体的模块,或者是否涉及产品风味。

android-maven-gradle-plugin

集成android-maven-gradle-plugin。步骤在文档链接中。

模块build.gradle

apply plugin: 'com.github.dcendents.android-maven'

afterEvaluate {
  uploadArchives {
    repositories {
        mavenDeployer {

            addFilter('debug') { artifact, file ->
                artifact.name.contains("debug")
            }
            addFilter('release') { artifact, file ->
                artifact.name.contains("release")
            }

            pom('debug').groupId = 'com.yourgroup'
            pom('release').groupId = 'com.yourgroup'
            pom('debug').artifactId = "MyArtifact"
            pom('release').artifactId = "MyArtifact"
            pom('debug').version = android.defaultConfig.versionName + "-SNAPSHOT"
            pom('release').version = android.defaultConfig.versionName
            pom.packaging = 'aar'

            repository(url: "http://localhost:8081/nexus/content/repositories/releases/") {
                authentication(userName: 'user'), password: 'pwd')
            }
            snapshotRepository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {
                authentication(userName: 'user'), password: 'pwd')
            }
        }
    }
 }
}