1. 程式人生 > >怎樣釋出同一個庫到多個repo中

怎樣釋出同一個庫到多個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