所以假設我有以下內容settings.gradle:
include 'math-server'
project(':math-server').projectDir = file('math/server')
include 'math-client-gen'
project(':math-client-gen').projectDir = file('math/client')
include 'ai'
現在我不想提交 math-client-gen 中的任何檔案(包括 build.gradle),因為這些檔案是由以下中的構建作業生成的math-server:
// math/server/build.gradle
task generateClient(type:Exec) {
workingDir '.'
inputs.dir('./app')
inputs.dir('.')
outputs.dir('../client')
commandLine './client-generator/generate.sh'
}
generate.sh 利用了kotlin 的 openapi 客戶端生成器。
現在該ai專案依賴于math-client-gen:
// ai/build.gradle
dependencies {
compile project(':math-client-gen')
}
現在,我目前找到了兩種次優方法來完成這項作業。
選項 1 是./gradlew :math-server:generateClient在我能夠運行之前運行./gradlew :ai:build。這很糟糕,因為你不能再單獨構建人工智能了。
選項 2 是提交檔案,這當然也不是應有的方式。
我確信有一個更好的方法可以用 gradle 來做,但我還沒有找到它。作為一種妥協,math-client-gen/build.gradle如果沒有它就無法作業,我愿意提交生成的。
這個問題的最佳解決方案是什么?
注意:我還看到了類似的東西:
implementation files(layout.buildDirectory.dir('classes')) {
builtBy 'compile'
}
在檔案中,這看起來很有希望,但如果可能的話,我希望將它用于整個子專案,而不僅僅是一些源檔案。
uj5u.com熱心網友回復:
// ai/build.gradle
afterEvaluate {
tasks.build.dependsOn(project(":math-client").tasks["generateClient"])
}
自動化您的第一個選項。
uj5u.com熱心網友回復:
最后我犯build.gradle的math-client-gen,并有這條線有:
// math/client/build.gradle
compileKotlin {
dependsOn ':math-server:buildMathClient'
}
這確保了當此專案在某處列為依賴項時始終生成客戶端。
然后,您可以簡單地將其math-client-gen作為依賴項添加到其他專案中,無需額外步驟:
// ai/build.gradle
dependencies {
compile project(':math-client-gen')
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408786.html
標籤:
