我在亚马逊担任软件工程师多年,但最近决定搬到另一家公司。在亚马逊有一个自定义构建系统,称为巴西。
它的工作方式是我将定义一个工作区,然后定义我在哪里使用哪些包进行开发。一个例子:包 A 依赖于 B、C 和 D。当我创建我的工作区时,我会指定我需要在本地拥有 A 和 B。
将创建以下文件夹结构:
myServiceAWorkspace
- .workspaceConfig
- A/
- A/src
- A/tst
- A/.packageConfig
- B/
- B/src
- B/tst
- B/.packageConfig
.packageConfig
包含有关依赖关系和如何构建项目的信息,很像 build.gradle
如果我在哪里去 A 文件夹并运行我们的构建命令,它是否会从本地工作区使用 B 构建 A 包,但会使用我们存储库中的 C 和 D。 (来自 B 的任何依赖项也将从我们的存储库中使用,除非它们在本地工作区中 checkout )
我发现这非常强大,因为它使不同服务之间的共享包变得非常容易。
如果一直在寻找像这样工作的构建系统,但没有运气。是否有任何构建系统可以做到这一点,或者有没有办法让 Gradle 或 Maven 像这样工作?
最佳答案
我认为该组织已经为某种需求创建了一个构建系统,顺便说一下 Maven 和 Gradle 遵循约定优于配置的原则。我会特别建议在您的情况下使用 Apache Ant一个旧的构建系统,但它很棒。如果您愿意,也可以使用 Apache Ivy根据需要定制您的构建。同样,它可能无法满足您提到的确切要求,但至少您可以做到。我觉得推荐大家可以放心使用的Maven或者Gradle。
正如 JF Meier Sir 建议的那样,您可以创建多模块 maven 或 gradle 项目以获得更精细的方法。
关于maven - 构建可以使用来自多个转发的依赖项的系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58568673/