我在以下目錄結構中有一個 gradle復合構建。
.
├── component-1
├── component-2
├── component-3
└── composite-build
在這里,所有組件都是多專案構建。每個組件都實作了發布插件,可以單獨發布。composite-build有以下settings.gradle。
rootProject.name = 'composite-build'
includeBuild '../component-1'
includeBuild '../component-2'
includeBuild '../component-3'
我想按release特定順序執行每個組件的任務,但找不到合適的方法。以下是我嘗試過但失敗的一些案例。release在這些情況下,由于發布插件完成的 git 標簽提交沖突,個別任務也會失敗。
情況1:
在build.gradle
task releaseAll {
dependsOn gradle.includedBuild('component-1').task(':release')
dependsOn gradle.includedBuild('component-2').task(':release')
dependsOn gradle.includedBuild('component-3').task(':release')
}
案例二:
在build.gradle
task releaseComponent1 {
dependsOn gradle.includedBuild('component-1').task(':release')
}
task releaseComponent2 {
dependsOn gradle.includedBuild('component-2').task(':release')
}
task releaseComponent3 {
dependsOn gradle.includedBuild('component-3').task(':release')
}
releaseComponent2.configure {
mustRunAfter releaseComponent1
}
releaseComponent3.configure {
mustRunAfter releaseComponent2
}
task releaseAll {
dependsOn releaseComponent1
dependsOn releaseComponent2
dependsOn releaseComponent3
}
示例錯誤訊息:
> Task :component-1:component-1-release:preTagCommit FAILED
Running [git, commit, -m, [Gradle Release Plugin] - pre tag commit: 'component-1-0.1.10'., -a] produced an error: []
Running [git, push, --porcelain, origin, main] produced an error: [error: failed to push some refs to 'https://github.com/<username>/<repo-name>.git']
> Task :component-1:release FAILED
Release process failed, reverting back any changes made by Release Plugin.
Running [git, checkout, gradle.properties] produced an error: [error: pathspec 'gradle.properties' did not match any file(s) known to git]
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':component-1:component-1-release:preTagCommit'.
> Failed to push to remote - [To https://github.com/<username>/<repo-name>.git
! refs/heads/main:refs/heads/main [remote rejected] (cannot lock ref 'refs/heads/main': is at <xxxx> but expected <yyyy>)
Done
][error: failed to push some refs to 'https://github.com/<username>/<repo-name>.git'
]
uj5u.com熱心網友回復:
gradle 總是有一個選項,您可以在其中自動化和鏈接任務執行,finalizedBy您可以測驗這個簡單的代碼來檢查它是如何作業的:
task A() {
println 'taskA'
}
task B() {
println 'taskB'
}
tasks.named("B") { finalizedBy("A") }
task C() {
println 'taskC'
}
tasks.named("C") { finalizedBy("B") }
這樣,通過呼叫它將gradle C回溯執行A然后BC
同樣,您可以執行 3 個任務來獲得所需的有序執行,如下所示
task c1release(type:Exec) {
workingDir '.\\component-1'
commandLine("cmd", "/c", "gradle", "release")
doLast {
println "component-1 release is being excuted"
}
}
tasks.named("c1release") { finalizedBy("c2release") }
task c2release(type:Exec) {
workingDir '.\\component-2'
commandLine("cmd", "/c", "gradle", "release")
doLast {
println "component-2 release is being excuted"
}
}
tasks.named("c2release") { finalizedBy("c3release") }
task c3release(type:Exec) {
workingDir '.\\component-3'
commandLine("cmd", "/c", "gradle", "release")
doLast {
println "component-3 release is being excuted"
}
}
tasks.named("releaseAll") { finalizedBy("c1release") }
task releaseAll() {
println "Start releasing"
}
通過呼叫gradle releaseAll它會c1release先執行c2release然后c3release
但是我仍然希望您知道您在問題中包含的案例中遇到了什么樣的錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523310.html
標籤:毕业典礼时髦的构建.gradle毕业插件gradle-release-plugin
