maven gradle插件如何上传多渠道library

1、背景

对接的第三方SDK分联调版(测试环境)跟正式版(生产环境),调试时用联调版,上线用正式版。两个环境对应不同的代码、资源文件,考虑到复用问题,因此新建一个library集成这个SDK,并上传到公共库,之后在项目中直接依赖即可。

2、需求及实现

2.1、需求

因为分两个版本,且版本的代码、资源各不相同,因此这个library应该要实现以下需求

  1. 一个library module包含多个渠道flavor
  2. 可以单独上传flavor,并且互不影响
2.2、一个任务上传一个渠道

正常情况下使用maven 插件是这样:

apply plugin: 'com.android.library'
apply plugin: 'maven'

然后用uploadArchives配置pom相关信息,和上传路径等:

uploadArchives {
        repositories.mavenDeployer {
            pom.groupId = GROUP
            pom.artifactId = ARTIFACT_ID
            pom.version = VERSION_NAME
            repository(url: REPOSITORY_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
        }
}

最后执行uploadArchives任务即可上传成功。

但是这样显然不符合需求,多个渠道的情况下会有多个aar,且pom.artifactId也是不一样的,需要针对性的配置。

2.3、一个任务同时上传多个渠道

查了好几天资料,都没发现什么有用的信息,大多都是针对单个flavor的,终于在StackOverflow上找到了一些有用信息,照葫芦画瓢,最后gradle如下:

import org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact //导入类
...
android {
    publishNonDefault true
    productFlavors {
        //调试环境、测试环境
        dev {
        }
        //生产环境、正式环境
        production {
        }
    }
    ...
}
//配置要上传的文件信息
artifacts {
    archives new DefaultPublishArtifact("production", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-production-release.aar"))
    archives new DefaultPublishArtifact("dev", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-dev-release.aar"))
}
//上传任务配置
uploadArchives {
    repositories.mavenDeployer {
        ...
        //添加过滤器
        //正式环境
        addFilter('pro') { artifact, file ->
            artifact.name.contains("production")  //production就是artifacts里指定的name
        }
        //测试环境
        addFilter('dev') { artifact, file ->
            artifact.name.contains("dev")
        }
        //单独设置pom文件
        pom('pro').groupId = GROUP
        pom('pro').artifactId = PRODUCTION_MAVEN.ARTIFACT_ID
        pom('pro').version = PRODUCTION_MAVEN.VERSION_NAME
        pom('dev').groupId = GROUP
        pom('dev').artifactId = DEV_MAVEN.ARTIFACT_ID
        pom('dev').version = DEV_MAVEN.VERSION_NAME
    }
}


这样执行uploadArchives之后,就会上传多个渠道的aar了,这里算完成了一半。

2.4、自定义上传任务

要实现单个渠道上传,只靠uploadArchives这一个任务是不行的,因此要自定义上传任务,实现一样的功能。本质上uploadArchives也是Upload类型的Task,即我们可以照着uploadArchives自定义Task继承Upload:

//上传调试版aar
task uploadDev(type: Upload, group: "upload") {
    repositories.mavenDeployer {
        repository(url: uri('../repos')) {
            
        }
        addFilter('dev') { artifact, file ->
            println("artifact " + artifact.name)
            artifact.name.contains("dev")
        }
        pom('dev').groupId = MIGU_GROUP
        pom('dev').artifactId = DEV_MAVEN.ARTIFACT_ID
        pom('dev'
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值