【问题标题】:Maven Variables are not replaced into installed pom fileMaven 变量不会被替换到安装的 pom 文件中
【发布时间】:2012-02-20 21:29:45
【问题描述】:

我们使用 Maven(3.0.3) 作为构建工具,我们需要为不同的环境(DEV、TEST、QA)提供不同的版本。如果我们在构建时根据 environment 传递 version 属性值,则安装的 POM 没有传递的属性值,而是仍然有 ${app-version} 字符串。

我已经看到这个http://jira.codehaus.org/browse/MNG-2971有一个错误

还有其他选择吗,因为我们不能针对不同的环境使用不同的POM文件,这将很难维护..

谢谢 维杰

【问题讨论】:

  • 我不认为您真的应该使用 Maven 的安装机制和存储库来为各种暂存环境创建应用程序的部署工件。更好的做法是从源代码控制标签进行部署并在目标服务器上进行构建,或者使用程序集插件创建部署包(过滤配置文件以替换那里的占位符)并分发。
  • 在每个部署目标上进行构建,而目前在云环境中很流行,这完全是矫枉过正。

标签: maven maven-3


【解决方案1】:

为环境创建不同的工件并将参数用作分类器。所有三个工件的 pom 都是相同的,但分类器将它们分开。

【讨论】:

  • 如果我有 SNAPSHOT 版本的分类器,Maven 是否会在部署到远程存储库时捕获时间戳?
  • 据我所知,它应该适用于所有工件。
【解决方案2】:

显然 Maven 在安装 POM 时不会进行任何变量/属性替换。按原样安装,就是这个原理。您最好不要从 POM 中读取任何属性(除非这是例如版本号),但您应该在外部文件中配置您的属性(每个阶段一个,例如 dev.propertiestest.properties,...)然后配置 Maven配置文件(同样,每个阶段一个)并调用 Maven,例如 mvn -Pdev,具体取决于您要构建的内容。在配置文件中,您可以使用您喜欢的任何属性打包您的最终应用程序(例如,借助 build-helper-maven-plugin:add-resourcemaven-antrun-plugin + 复制规则)。

您也可以filter your resources。例如,您可以过滤您的 Spring 上下文 XML 文件,该文件引用属性文件(因此您打包所有属性文件,但 Spring 只会引用一些特定的)。或者您可以过滤另一个属性文件,从中您将了解要使用的“主”属性文件是什么(双重间接)。

【讨论】:

    【解决方案3】:

    您应该为不同的targets within a single build 创建档案,并使用已经提到的分类器将这些工件彼此分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 2015-05-15
      • 2013-01-23
      • 1970-01-01
      相关资源
      最近更新 更多