0

我正在尝试设计一种解决方案,允许单个 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 项目的单个构建可以构建模块的两个版本吗?

4

2 回答 2

0

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

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

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

于 2015-02-03T11:04:39.777 回答
0

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

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

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

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

于 2015-02-04T14:51:00.547 回答