maven - 构建可以使用来自多个转发的依赖项的系统
问题描述
我在亚马逊担任软件工程师多年,但最近决定搬到另一家公司。在亚马逊有一个自定义构建系统,称为巴西。
它的工作方式是我将定义一个工作区,然后定义我在哪里使用哪些包进行开发。一个例子:包 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 的任何依赖项也将从我们的存储库中使用,除非它们在本地工作区中签出)
我发现这非常强大,因为它使不同服务之间的共享包变得非常容易。
如果一直在寻找像这样工作的构建系统,但没有运气。是否有任何构建系统可以做到这一点,或者有没有办法让 Gradle 或 Maven 像这样工作?
解决方案
我认为该组织已经为某种需求创建了一个构建系统,顺便说一下 Maven 和 Gradle 遵循约定优于配置的原则。我会特别建议在您的情况下使用Apache Ant一个旧的构建系统,但它很棒。如果您愿意,您还可以使用Apache Ivy根据需要自定义您的构建。同样,它可能无法满足您提到的确切要求,但至少您可以做到。我觉得推荐大家可以放心使用的Maven或者Gradle。
正如 JF Meier Sir 建议的那样,您可以创建多模块 maven 或 gradle 项目以获得更精细的方法。
推荐阅读
- python - 尝试通过在 python 中更改数组的值来更新数组
- html - 如何对齐 HTML 中的按钮?
- javascript - 无法使用模态将值放入本地存储
- firebase - 是否可以使用模拟服务帐户初始化 Firebase Admin SDK?
- vega-lite - 使用 Vega-Embed 时的过时版本警告
- c# - 无法转换 system.generic.list 匿名类型
- android - 使用 macOS 终端命令编辑部分文本(仅限终端命令)
- flutter - 自动编号 Flutter TabBar 选项卡
- c - C连接字符串缓冲区溢出
- django - DRF APIview中使用LoginRequiredMixin、PermissionRequiredMixin是否有效?