gpt4 book ai didi

gradle - 如何使用 gradle 和多个 gradle 项目实现 monorepo

转载 作者:行者123 更新时间:2023-12-03 03:55:50 25 4
gpt4 key购买 nike

我们有几个完整的 gradle 项目 A、B、C、D。这些是将开始共享 protobuf 生成的 java 文件的微服务。我们正在考虑这样的结构

A
build.gradle (this is a full on gradle build)
B
build.gradle (this is B's full on gradle)
common
build.gradle (build the protobuf that is used by A and B)

现在,问题是我们如何确保当开发人员构建 A 时,它也构建通用,以防它在他的 git pull 上发生变化。 B 也是如此。 settings.gradle 文件似乎没有 ../../:project 或类似的东西。

我确实记得 gradle 也提出了一种构建多个 gradle 项目的方法。

理想情况下,当有人更改共同点时,将启动多个 jenkins 构建,并验证更改核心代码不会破坏任何使用它的服务。我不太确定如何
1. document the things that depend on common
2. use the document to kick off builds of all things depending on common

然后,如果这要增长,并且您有 D 依赖于 C 依赖于公共(public),则每个构建都需要开始将二进制上游从公共(public)提供给 C,然后将 C 的 jar 和公共(public)的 jar 提供给 D。我知道使用了“裤子”在推特上做到这一点。谷歌正在使用 bazel。也许我会调查而不是gradle?或者我们可以将它们混合在一起吗?

最佳答案

简单地声明对 common 的依赖应该足够了:

// Project A's build.gradle
dependencies {
implementation(project(":common"))
}

为了 build a , common 的构建需要成功。如果 common 的构建由于某种原因失败,然后构建 a也会失败。例子:
$ ./gradlew project-a:build
> Task :common:compileJava FAILED
/Users/cisco/code/example-multi-project/common/src/main/java/common/ExampleCommon.java:6: error: incompatible types: int cannot be converted to String
return 1;
^
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':common:compileJava'.
> Compilation failed; see the compiler error output for details.

您可以在上面看到,当我尝试构建项目 a ( project-a:build) 时,调用了 common 的构建任务 ( :common:compileJava)。

两个项目 a/b/etc 都应该进行彻底的测试(单元、集成、烟雾等),以确保尽早/经常检测到任何不兼容的更改。

您可以在官方指南中阅读有关多项目构建的更多信息: https://docs.gradle.org/current/userguide/multi_project_builds.html

关于gradle - 如何使用 gradle 和多个 gradle 项目实现 monorepo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60027730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com