原文链接 译者:carvendy
使用Maven 2 为不同环境构建
构建同一个组件到不同的环境是经常让人苦恼的。你有多个环境,为了实例化测试和生产服务或者可能是一个服务的集合他们使用了不同的配置文件。在指南中我将解释怎么样使用配置属性来构建和打包组件并指定环境。看看构建配置属性解释 为了配置属性的概念更深入的解释。 笔记:
指南指出你必须要有基本的Maven 2.
将使用一种方式配置Maven,简单地解决了配置安装。由简单配置安装你,我的意思是你只能有一个文件或者小集合文件来指定环境。有其他更好的方法来处理两个和许多尺寸配置问题·····
这个例子使用标准的文档结构。
pom.xmlsrc/ main/ java/ resources/ test/ java/
在 src/main/resources下有三个文件:
environment.properties – 这是默认的配置和将会默认打包在工件。
environment.test.properties – 这是转化为测试环境。
environment.prod.properties -这是基本类似于转化为测试环境和将被用于生产环境。
在项目中描述符,你将需要配置不同的配置项。只有测试环境展示在这里。
<profiles> <profile> <id>test</id> <build> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <delete file="/environment.properties"/> <copy file="src/main/resources/environment.test.properties" tofile="/environment.properties"/> </tasks> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>test</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> .. Other profiles go here .. </profiles>
这里有三件事被配置在这个片段:
配置 antrun插件执行命令在测试周期的时候,会拷贝这个environment.test.properties 文件到environment.properties。
配置测试插件当构建测试和生产工件时候跳过所有测试。这很有用对于你不想在生产的时候跑测试代码。
配置jar插使用测试分类器件创建一个 “attached”的jar。 为了激活配置项执行 mvn -Ptest install 和Maven将执行这步骤在配置项中不得不走的正常流程。从构建你可以得到两个工件,”foo-1.0.jar” 和 “foo-1.0-test.jar”。这两工件将完全相同。
注意事项
当前 Maven 2不允许一个项目构建只有生产工件。(eg: 不得不生产一个“主”工件一样) 这结果是两个相同的jar打包和安装。jar插件可能应该也得到支持使用两个不同的输出目录,将被用于基础构建jar。
这样使用删除任务可能看到一点古怪,但是这需要确定拷贝的任务准确地被拷贝。这个拷贝的任务将看看源码和目标文件的时间戳,只有当拷贝的文件不知道源码可能不同于的最新时间将会执行。
在构建测试配置讲在 target/classes和将不会被覆盖因为resource插件使用相同的时间戳检查,所以你应该总是做一次clean操作在执行Maven配置项之后。
为了这些上面给出的原因。你必须只能为一个环境构建一个工件在一次执行,和你执行“mvn clean”在无论你改变了哪个配置。如果你不这样,将可能得到缓和配置文件的工件。