使用Maven发布不同的配置

时间:2010-10-05 18:53:13

标签: java maven-2 build

我目前正在将我们的构建过程从Ant迁移到Maven。我们的应用程序部署到许多不同的客户,每个客户都有一组独特的依赖关系和配置。我可以实现不同的配置文件来对它们进行建模并从中构建所需的战争。但是,这是在编译时发生的过程。

每个版本都在SVN下标记,并上传到我们的内部Nexus存储库。我希望能够获取已定义的版本并根据配置文件重新构建它。有没有办法做这样的事情?除了我应该使用的配置文件之外还有什么东西吗?

4 个答案:

答案 0 :(得分:2)

  

“声明war插件的多次执行以生成多个工件(并安装/部署它们)”这听起来像这可能是前进的方向。我该怎么做呢?

这有点违背Maven黄金法则(每个模块规则的一个主要工件)但可以完成。 One artifact with multiple configurations in Maven博客文章介绍了实现此方法的一种方法:

  

我决定把所有环境都放在一边   具体配置在一个特殊的   源树,具有以下内容   结构:

+-src/
  +-env/
    +-dev/
    +-test/
    +-prod/
     

然后我配置了maven-war-plugin   有三种不同的执行   (默认加两个额外),一个用于   每个环境,生产三个   不同的战争档案:beer-1.0-dev.war,   beer-1.0-test.war和   啤酒-1.0-prod.war。每一个   配置使用标准   从项目输出文件然后   复制了来自的内容   相应的src/env/目录   到输出文件,启用   覆盖文件放在   对应的src/env/目录。它   还支持复制完整的树   结构进入输出目录。   因此,如果你想要的话   替换测试中的web.xml   只需创建以下内容   目录:

src/env/test/WEB-INF/
     

并确定您的测试   {(1}}在此目录中,如果您   想要覆盖web.xml   文件放在classpath根目录中   您测试环境的目录   创建了以下目录:

db.property
     

并确定您的测试   此目录中的src/env/test/WEB-INF/classes 文件。

     

我保留了db.property目录   配置用于开发   环境。原因是   能够使用   没有任何额外的maven-jetty-plugin   组态。构造

     

下面你会找到maven-war-plugin   我以前的配置   完成这个:

src/main

  

(...)我可以使用配置文件定义每个客户项目,但我不知道是否有办法将它们发布到存储库。

您有几种选择:

  • 使用配置文件并多次运行构建(使用分类器创建工件并安装/部署它们)
  • 声明war插件的多次执行以生成多个工件(并安装/部署它们)
  • 使用不同的模块(可能war overlays将公共部分与特定部分合并)
  

或者至少在Maven中使用SVN标记自动构建具有指定配置文件的工件。

嗯,这是可行的。但是如果没有关于特定问题的更多细节,就很难更准确。

答案 1 :(得分:1)

我会看看你的架构,看看有没有办法将你的项目分成多个项目。一个是主要的代码库。其他项目将依赖于主项目生成的JAR文件,并添加自己的配置,依赖项等,以生成最终的工件。

这样,您就可以相互独立地对客户特定代码进行版本控制,并将公共代码保存在一个位置,并与客户特定的内容分开。

答案 2 :(得分:0)

您是否看过Maven Assembly plugin

此插件允许您自定义分发的汇编方式 - 即格式(.tar.gz.zip等),目录结构等。我认为您应该能够绑定多个实例package阶段的插件,用于汇总输出的多个变体(即分别为客户1,customer2等打包)。

然后,部署插件应自动处理将target目录中的每个已组装软件包部署到存储库。

答案 3 :(得分:0)

我最终做了一些略有不同的事情。我们不会将这些版本存储在我们的内部存储库中。相反,我们正在使用Hudson和多配置项目(每个客户的一个配置/配置文件)构建。这样,当发布版本时,运行Hudson作业以为所有客户构建不同的战争。然后将它们存储在Hudson服务器而不是Nexus上。还可以在Nexus的发布版本中随时构建针对特定版本和客户的构建。 - samblake 2011年3月16日12:32