假设我有下面的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'现在,我不想提交数学客户机-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是提交文件,当然这也不是它应该采用的方式。
我相信有一个更好的方法来做格拉德尔,但我只是没有设法找到它。作为一个折衷方案,如果生成的math-client-gen/build.gradle不起作用,我愿意提交它。
解决这个问题的最好办法是什么?
注:我还看到了这样的情况:
implementation files(layout.buildDirectory.dir('classes')) {
builtBy 'compile'
}在文档中,这看起来很有希望,但如果可能的话,我希望将它用于整个子项目,而不仅仅是一些源文件。
发布于 2022-01-10 06:07:19
// ai/build.gradle
afterEvaluate {
tasks.build.dependsOn(project(":math-client").tasks["generateClient"])
}使你的第一个选择自动化。
发布于 2022-01-10 10:23:54
最后,我提交了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://stackoverflow.com/questions/70640247
复制相似问题