【问题标题】:Maven and multiple customer customizationsMaven 和多个客户定制
【发布时间】: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


    【解决方案1】:

    我们有一个相当大的 Maven 多项目,创建了几个共享大量代码和库的应用程序(不过,我们确实向客户提供了相同的产品)。

    我们有一个父 POM,我们在其中设置存储库并控制依赖项版本 (dependencyManagement)。我们有一个核心模块(jar),它具有所有应用程序使用的通用代码/功能。 所有应用程序都扩展父 POM 并导入核心模块:什么是通用的被推送到核心(我在这里简化),而特定于应用程序的代码(可能是你的客户?)在应用程序 Maven 子项目中,其中我们可以根据需要灵活地进行定制/调整。

    通过这种方式,我们有许多具有相同版本的 POM,我们为每个应用程序创建一个 WAR 文件,以便它们可以独立部署。 版本更新通过 Maven Release Plugin 完成。

    我相信还有其他方法,但我们已经运行这个模型多年,没有出现大问题,关键是不要在子项目之间创建循环依赖。

    【讨论】:

    • 是的,这就是我们情况下的客户。在我们的情况下,困难在于特定于应用程序的代码将依赖于具有自己版本控制的其他项目。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多