【发布时间】:2020-01-08 16:29:46
【问题描述】:
我正在使用我们公司内部和外部都使用的应用程序来测试 API(从简单的 REST API 到专有的二进制协议)。使用该应用程序的每个客户/客户项目都可以有多个 API/协议及其版本。这意味着我们需要为每个客户提供特定的构建。
到目前为止,我们通过拥有一个核心组件来做到这一点,该核心组件被所有客户用作 maven 依赖项。然后,我们开始需要为客户构建更复杂的构建设置,并决定为所有客户项目提供一个共同的父 pom,从而形成这种结构。
_customer1_
/ \
parentPom / \_ coreProject
\ /
\_customer2_/
只要我们的 API 和协议在开发过程中使用 SNAPSHOTS 就可以了,而且我们只需要在每个客户的 pom 中手动更改该客户的版本(每个客户最多每月一次)。 但最近一些 API 已迁移到每天至少创建一次新的非 SNAPSHOT 版本。现在,这已经变得站不住脚了,因为我们可以在一天内拥有多个版本。
每个客户项目都有自己的父 pom,其中包含每个 API/协议的所有相关版本信息。但是,如果我们将这个 pom 用作我们客户项目的父项目,我们将失去我们自己通常定义的构建步骤的可重用性。
我们尝试的一个解决方案是继续做我们正在做的事情,但向客户项目添加一个新模块,该模块使用例如胖 customer1 jar 作为依赖项,然后在其顶部添加正确的 API/协议那。
这不起作用...我们面临大量类加载器问题,需要寻找其他解决方案。
由于 maven 不支持多个父级,这不是一个解决方案。将我们的配置包含在所有客户共享的一些公共父 pom 中是不可行的。我们试图避免手动复制所有构建步骤,因为我们不想维护它。
我无法想象我们是唯一遇到这个问题的人,但我一直觉得我们错过了这个问题的根本原因,因为我找不到任何可用的解决方案。
如果您是企业专家,请分享您的智慧!
【问题讨论】:
标签: java maven enterprise