1

是否有一种标准方法可以在 Maven 构建中提供特定于环境的资源?

例如 - 我们希望我们的构建将在应用程序中使用的本地服务的特定 IP 地址不同的环境中运行。

一种选择是将其设置为shell环境变量,但不清楚这是否会传播到运行单元测试的surefire jvm。

另一种选择是在 pom.xml 子类文件中提供此信息,但这会带来其他负担(每个开发人员都需要维护自己的 pom 文件),这当然会破坏任何类型的自动构建环境。

4

2 回答 2

1

以下示例显示了如何使用构建配置文件来获取不同的属性值集。

例子

您可以使用-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
..

pom.xml

<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>
于 2013-02-27T21:45:53.527 回答
0

Surefire 尽最大努力确保分叉的 JVM 与用户环境的变化尽可能隔离。如果你想通过thin,你需要使用systemPropertyVariables配置选项来定义分叉JVM的系统属性。

其他人提到了个人资料。一般来说,使用配置文件来注入特定于环境的细节是一个糟糕的计划,甚至是 Maven 反模式。只有一种情况是这样的配置文件不是反模式(注意我不是在推广一种模式,只是移出反模式类别),这是您的配置文件调整测试环境并且您没有附加的地方到tests.jar反应堆。在这种情况下,“调整过的”工件不会逃脱其模块以导致“坏事”(例如,当存储库中的工件部署到存储库时,不确定哪个配置文件处于活动状态,或者构建是否使用来自本地仓库或具有不同配置文件的远程仓库)

systemPropertyVariables我将在 CLI 上使用系统属性,并使用配置选项将其传递给集成测试。

如果您想要更“maven 方式”的东西,您可能需要一个 maven 插件来启动要测试的服务,但这对于非基于 java 的服务可能非常困难。请参阅cassandra-maven-plugin以获取有关如何使用基于 Java 的服务执行此类操作的示例。

于 2013-02-27T22:16:27.103 回答