适用于多种环境的Maven工件

时间:2017-09-27 00:03:38

标签: maven

我正在开发一个项目,该项目使用Maven for build和Artifactory作为Maven存储库,其中发布了构建。当只有一组配置时,一切正常 - 创建构建并发布到Artifactory。

我需要能够为包含特定于环境的资源(MongoDB连接URL和log4j2 xml)的每个环境创建一个包含必要二进制文件和一个附加工件的WAR。 Jenkins中的部署作业应将WAR和特定于环境的资源JAR部署到服务器。

我被困在创建和发布工件中。我试过并拒绝的方法是:

  • Maven配置文件 - 因为它为每个环境创建单独的WAR文件而被拒绝。我觉得创建几十MB的WAR文件只是为了改变一些配置是不合逻辑的。
  • Spring配置文件 - 被拒绝,因为它使用代码来解决部署问题,方法是在所有服务器上部署所有配置,并依赖于在环境中设置配置文件+根据配置的配置文件名称更改代码。
  • Maven资源插件 - 可用于在适当的目录结构中复制环境特定资源;但是在“部署”阶段没有发布到Artifactory。
  • Maven Jar插件 - 可以创建附加的JAR工件,但附加的工件不能包含资源(或者至少我找不到在附加的JAR中包含资源的方法)
  • Maven构建帮助程序插件 - 可以将单个文件作为附加工件发布,但在部署到Artifactory时会更改文件名。
  • 多模块POM - 这种方法可以为每个环境创建资源工件,但有两个缺点:
    • 更新主工件版本需要更新到所有POM(容易遗漏)
    • 不可扩展 - 如果添加了新环境,则需要创建单独的POM。

似乎Maven + Artifactory不适合多环境场景,因为似乎没有任何直接的解决方案。我错过了什么吗?我应该采取什么方法?

更新 我使用https://github.com/khmarbaise/multienv-maven-plugin解决了这个问题。这让我可以创建一个WAR和多个JAR文件:   - myapp.0.1.0.war   - myapp.0.1.0-dev.jar   - myapp.0.1.0-qa.jar   - myapp.0.1.0-prod.jar

我陷入了下一步。安装阶段将JAR安装为WAR,然后部署阶段将它们作为WAR上载到Artifactory。有什么方法可以将包装类型保持为JAR的JAR?

0 个答案:

没有答案