【问题标题】:Is it possible to build multiple versions of the same module?是否可以构建同一模块的多个版本?
【发布时间】:2015-04-02 02:34:06
【问题描述】:

我正在尝试设计一种解决方案,允许单个 Virgo 应用程序提供向后兼容性,以便与外部服务提供商的多个版本集成。

例如,名为 PortalApp 的应用程序是当前与 ThirdPartyApp 2.3 版集成的门户。 ThirdPartyApp v3.0 即将推出新功能,因此新版 PortalApp 将具有旧版 ThirdPartyApp 无法使用的功能。

我不需要能够在运行时动态地提供两个版本,只需要一个或另一个。我已经确定我可以在 Virgo usr 存储库中拥有两个版本的模块,并根据服务器启动时使用的 .plan 文件加载一个或另一个。

为简单起见,我们可以假设项目当前设置如下:

门户应用 - 网络应用 - 第三方提供商

还有许多其他模块依赖于 ThirdPartyProvider,因此更改 ArtifactId 会破坏这些链。我想做的是构建同一模块的两个不同版本。像这样的:

门户应用 - 网络应用 - - 1.0 - - 2.0 - 第三方提供商 - - 1.0 - - 2.0

我尝试在 web-app(包装:pom)中创建一个父 pom.xml,将 1.0 和 2.0 都标识为模块,但只构建了其中一个。

PortalApp 项目的单个构建能否构建一个模块的两个版本?

【问题讨论】:

  • 为什么要构建 2 个版本?一个用于 2.3 版本,另一个用于 3.0 版本?
  • 是的。就是这样,埃杜。问题在于需要继续向两个版本添加功能。否则,我可以归档旧模块并添加一个组装步骤,将其移动到 Virgo usr 存储库中。

标签: maven eclipse-virgo


【解决方案1】:

不,这是不可能的(实际上是这样,但你真的不想这样做,因为这是一个痛苦的世界)。 pom 有一个版本标签,这是构建的工件的版本。

而不是这样做,您应该创建一个多模块项目,每个 Web 应用程序都有一个模块,就像您在第二张图中所做的那样,每个模块都取决于相关版本的 ThirdPartyProvider。然后,您将从这些网络应用程序中提取出通用代码 - 通常这会产生两件事,一个您依赖于 web-app:1 和 web-app:2 的通用网络应用程序(这将创建所谓的“覆盖” ' 它将 common 的内容推送到其他两个应用程序中,但不会覆盖现有文件),以及一个包含公共 java 类的共享 java 库(取决于您如何使用第三方 api,您可能需要其中两个也)。

然后您构建两个 Web 应用程序,生成两个工件 web-app-1.war 和 web-app-2.war,每个工件都依赖于相关的 ThridPartyProvider 和公共类库。

【讨论】:

  • 感谢工程师。这有点像我所期待的。我希望我错过了 Maven 中的一个技巧或漏洞,但我认为我最终不得不为每个发布的版本实现单独的顶级 pom。
【解决方案2】:

为了将所有工件保持在同一版本中,您可以使用 Versions Maven Plugin 设置版本 2.0 或 3.0,并且在您的构建中您可以使用 mvn package -DthirdParty.version=3.0

确保你的 pom.xml 看起来像这样

<properties>
    <thirdParty.version>2.0</thirdParty.version>
</properties>

因此,您可以使用 Jenkins 来自动化构建并确保在您的持续集成过程中一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多