2012-01-27 180 views
2

我们使用Maven(3.0.3)作为构建工具,我们需要针对不同环境(DEV,TEST,QA)有不同的版本。如果我们在构建时根据环境传递版本属性值,则安装的POM不具有传递的属性值,而是仍具有$ {app-version}字符串。Maven变量不会被替换为已安装的pom文件

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

的错误是否有任何其他的选择,因为我们可以针对不同的环境,这将难以维持不不同的POM文件..

感谢 维杰

+0

我不认为您真的应该使用Maven的安装机制和存储库来为各种临时环境创建应用程序的部署工件。更好的做法是从源代码管理标签进行部署并在目标服务器上进行构建,或者使用程序集插件创建部署程序包(过滤配置文件以替换占位符)并分发该程序包。 – millimoose 2012-01-27 22:42:20

+0

在每个部署目标上进行构建,尽管在云环境中当前非常流行,但这种做法总是过度。 – 2012-02-01 20:58:18

回答

0

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

+0

如果我有SNAPSHOT版本的分类器,Maven是否在部署到远程存储库时捕获时间戳? – user684434 2012-02-03 21:32:31

+0

从我知道它应该为所有文物。 – 2012-02-04 17:43:25

0

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

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

相关问题