喜欢E文的直接看原文:https://maven.apache.org/guid...
同一项目为不同环境构建总是个麻烦事。你可能有测试和生产服务器,也可能有一组服务器运行同一个应用,但使用不同的配置参数。本指南意在使用侧面(profiles) 来对项目进行指定环境打包。可以参考Profile概念的介绍以了解更多。
提示
本指南假设你对 Maven 2 有基本的了解。会有简单的maven设置介绍。简单是指你的项目配置里仅有少数文件根据环境的不同有所变化。两维甚至多维度配置变化时有其他更好的解决方法。
这个例子中采用标准的目录结构:
pom.xml src/ main/ java/ resources/ test/ java/
在 src/main/resources 下有三个文件:
- environment.properties - 这是默认配置并会打包到最终发布包里.
- environment.test.properties - 这是用于测试的配置方案.
- environment.prod.properties - 这是与测试方案类似用于生产环境的配置.
在项目描述符里, 你需要配置不同的profiles. 这里只列出的测试用的profile.
<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="${project.build.outputDirectory}/environment.properties"/> <copy file="src/main/resources/environment.test.properties" tofile="${project.build.outputDirectory}/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插件用于创建带test修饰标识的JAR包。
激活执行这个profile办法是 mvn -Ptest install
,除正常步骤还将执行Profile里定义的步骤. 你将得到两人个包, "foo-1.0.jar" 和 "foo-1.0-test.jar". 这两个包是一样的.
小心
Maven 2 不能只编有修饰符的包. (i.e. 他非要生成主包) 所以搞出来俩一样的. JAR插件需要改进啊。能编到不同目录下会更好。
使用删除任务看上去有些怪异,只是为了确保能拷贝文件。拷贝任务会看源文件和目标文件的时间戳, 只拷贝和上次不同的文件.
编译后配置文件会在 target/classes 中, 他不会被覆盖,因为resources插件也使用同样的时间戳检查, 所以按这个profile构建时总要清理.
所以强制你每次构建时只能为单一环境构建一个单一的包.然后 "mvn clean" 如果你更改了profile选项参数. 要不的话你会把不同环境的配置混到一块去啦。