首页 > 解决方案 > 构建可以使用来自多个转发的依赖项的系统

问题描述

我在亚马逊担任软件工程师多年,但最近决定搬到另一家公司。在亚马逊有一个自定义构建系统,称为巴西。

它的工作方式是我将定义一个工作区,然后定义我在哪里使用哪些包进行开发。一个例子:包 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 像这样工作?

标签: mavengradleant

解决方案


我认为该组织已经为某种需求创建了一个构建系统,顺便说一下 Maven 和 Gradle 遵循约定优于配置的原则。我会特别建议在您的情况下使用Apache Ant一个旧的构建系统,但它很棒。如果您愿意,您还可以使用Apache Ivy根据需要自定义您的构建。同样,它可能无法满足您提到的确切要求,但至少您可以做到。我觉得推荐大家可以放心使用的Maven或者Gradle。

正如 JF Meier Sir 建议的那样,您可以创建多模块 maven 或 gradle 项目以获得更精细的方法。


推荐阅读