怎样发布同一个库到多个repo中

问题

在开发过程中,有时需要同时发布一份aar/jar到远程和本地的repo,这样可以保证在没有网的情况下编译成功。

解决

不可能在uploadArchive任务中设置多个repo,因为源码里明显写的只有单个repository对象。所以需要手写一个Upload task的子类。
里面有的坑是configuration需要手动设置成project的archives,否则打包不过。
推荐在每次发布之后,都在git上打一个tag,方便后续查问题。这里的坑是同一个task里的commandline是并行执行的,只能用task做顺序。
最后的gradle长这样:

apply plugin: 'maven'

repositories {
    mavenCentral()
}

group = "gt.${project.getName()}"
version "${project.extensions.getByName("uploadVersion")}-SNAPSHOT"

task uploadLocal(type: Upload) {
    // 需要把config设置成project的,要不然会报错
    configuration = project.configurations.findByName('archives')
    repositories {
        mavenDeployer {
            def localDir = uri("${rootProject.buildFile.parentFile.absolutePath}/repos")
            snapshotRepository(url: localDir)
            repository(url: localDir)
        }
    }
}

uploadArchives {
    repositories {
        mavenDeployer {
            snapshotRepository(url: 'http://remote') {
                authentication(userName: 'username', password: 'pwd')
            }
            repository(url: 'http://remote') {
                authentication(userName: 'username', password: 'pwd')
            }
            pom.project {
                groupId = "gt.${project.getName()}"
                artifactId "${project.getName()}"
            }
        }
    }
}

task gitRemoveTag(type: Exec) {
    commandLine 'git', 'tag', '-d', "library/${project.name}/${version}"
}

task gitAddTag(type: Exec, dependsOn: 'gitRemoveTag') {
    commandLine 'git', 'tag', "library/${project.name}/${version}"
}

task gitPushTag(type: Exec, dependsOn: 'gitAddTag') {
    commandLine 'git', 'push', 'origin', '--tags'
}

uploadArchives.dependsOn uploadLocal
uploadArchives.finalizedBy gitPushTag
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值