首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成整个gradle子项目并将其作为另一个项目中的依赖项?

如何生成整个gradle子项目并将其作为另一个项目中的依赖项?
EN

Stack Overflow用户
提问于 2022-01-09 10:09:48
回答 2查看 189关注 0票数 0

假设我有下面的settings.gradle

代码语言:javascript
复制
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中的构建作业生成的。

代码语言:javascript
复制
// 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

代码语言:javascript
复制
// ai/build.gradle
dependencies {
    compile project(':math-client-gen')
}

现在,我已经找到了两种不太理想的方法来完成这项工作。

选项1是在我能够运行./gradlew :math-server:generateClient之前运行./gradlew :ai:build。这太糟糕了,因为你不能再靠自己来建立人工智能了。

选项2是提交文件,当然这也不是它应该采用的方式。

我相信有一个更好的方法来做格拉德尔,但我只是没有设法找到它。作为一个折衷方案,如果生成的math-client-gen/build.gradle不起作用,我愿意提交它。

解决这个问题的最好办法是什么?

注:我还看到了这样的情况:

代码语言:javascript
复制
    implementation files(layout.buildDirectory.dir('classes')) {
        builtBy 'compile'
    }

在文档中,这看起来很有希望,但如果可能的话,我希望将它用于整个子项目,而不仅仅是一些源文件。

EN

回答 2

Stack Overflow用户

发布于 2022-01-10 06:07:19

代码语言:javascript
复制
// ai/build.gradle

afterEvaluate {
    tasks.build.dependsOn(project(":math-client").tasks["generateClient"])
}

使你的第一个选择自动化。

票数 0
EN

Stack Overflow用户

发布于 2022-01-10 10:23:54

最后,我提交了build.gradlemath-client-gen,并在这里有以下一行:

代码语言:javascript
复制
// math/client/build.gradle
compileKotlin {
    dependsOn ':math-server:buildMathClient'
}

这可以确保在某个地方将此项目列为依赖项时始终生成客户端。

然后,您可以简单地在其他项目中将math-client-gen作为依赖项添加,不需要其他步骤:

代码语言:javascript
复制
// ai/build.gradle
dependencies {
    compile project(':math-client-gen')
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70640247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档