怎樣釋出同一個庫到多個repo中
阿新 • • 發佈:2019-01-07
問題
在開發過程中,有時需要同時釋出一份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