是否有一个Maven构建一个标准的方式来提供环境特定的资源?
例如 - 我们希望我们的建设将在环境中运行,其中该应用程序中使用一个本地服务的特定IP地址是不同的。
一种选择是设置此作为外壳环境变量,但其并不清楚阉这将传播完成倒在万无一失的JVM的这运行单元测试。
另一种选择是设置在pom.xml子类文件的信息,但那是与其它行李(每个开发人员都需要维护自己的POM文件),当然这将打破任何形式的自动化构建环境。
是否有一个Maven构建一个标准的方式来提供环境特定的资源?
例如 - 我们希望我们的建设将在环境中运行,其中该应用程序中使用一个本地服务的特定IP地址是不同的。
一种选择是设置此作为外壳环境变量,但其并不清楚阉这将传播完成倒在万无一失的JVM的这运行单元测试。
另一种选择是设置在pom.xml子类文件的信息,但那是与其它行李(每个开发人员都需要维护自己的POM文件),当然这将打破任何形式的自动化构建环境。
下面的示例示出了一个建造轮廓可以如何用于拾取不同组的属性值。
您可以使用-p参数来激活的建造轮廓的一个
$ mvn -Ptest1 compile
..
[INFO] --- maven-antrun-plugin:1.7:run (default) @ demo ---
[INFO] Executing tasks
main:
[echo] arbitrary.property=1.0
..
切换配置文件拿起与第二档相关联的属性值:
$ mvn -Ptest2 compile
..
[INFO] --- maven-antrun-plugin:1.7:run (default) @ demo ---
[INFO] Executing tasks
main:
[echo] arbitrary.property=2.0
..
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<target>
<echo message="arbitrary.property=${arbitrary.property}"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>test1</id>
<properties>
<arbitrary.property>1.0</arbitrary.property>
</properties>
</profile>
<profile>
<id>test2</id>
<properties>
<arbitrary.property>2.0</arbitrary.property>
</properties>
</profile>
</profiles>
</project>
神火会尽力确保分叉JVM尽可能从用户环境的变化孤立。 如果你想通过变薄通过你需要使用systemPropertyVariables
配置选项定义分叉JVM系统属性。
其他人所说的轮廓。 在一般使用配置文件注入环境的具体细节是个不错的计划,甚至是Maven的反模式。 有一个且只有一个案例是这样的配置文件是不是一个反模式(注意我不是推广一个模式,只动了反模式类的),那是你的配置文件调整测试环境,你是不是连接所述tests.jar
到反应器中。 在这种情况下,当资源库中的神器被部署到回购,还是构建什么样的个人资料是活跃使用来自神器“扭捏”神器不会逃避自己的模块,使“坏事”(如不确定性本地回购或具有不同轮廓的远程回购)
我会用在命令行的系统属性,并通过它传递给使用集成测试systemPropertyVariables
配置选项。
如果你想要的东西更是“Maven的方式”,你很可能需要一个Maven插件火起来是针对要测试的服务,但可以对非基于Java的服务非常困难。 见卡桑德拉- Maven的插件对于如何做这种类型的东西与基于Java的服务的例子。