是否可以构建同一模块的多个版本?

时间:2015-02-03 01:11:33

标签: maven eclipse-virgo

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

例如,应用程序称之为PortalApp,是一个当前与ThirdPartyApp 2.3版集成的门户。 ThirdPartyApp v3.0即将推出新功能,因此新版本的PortalApp将具有不能与旧版本的ThirdPartyApp一起使用的功能。

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

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

PortalApp
- web-app
- ThirdPartyProvider

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

PortalApp
- web-app
- - 1.0
- - 2.0
- ThirdPartyProvider
- - 1.0
- - 2.0

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

PortalApp项目的单个版本是否可以构建模块的两个版本?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

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