我曾在Amazon担任软件工程师多年,但最近决定迁移到另一家公司。在亚马逊,有一个定制的构建系统,称为巴西。
它的工作方式是,我将定义一个工作区,然后定义在哪里为我的开发使用哪些软件包。一个示例:程序包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爵士建议的那样,您可以创建多模块maven或gradle项目以获得更精细的方法。
您可以在composite builds的帮助下在Gradle中实现类似的功能。