定义机器特定资源的Maven构建最佳实践?(Best practice for defining m

2019-10-17 18:05发布

是否有一个Maven构建一个标准的方式来提供环境特定的资源?

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

一种选择是设置此作为外壳环境变量,但其并不清楚阉这将传播完成倒在万无一失的JVM的这运行单元测试。

另一种选择是设置在pom.xml子类文件的信息,但那是与其它行李(每个开发人员都需要维护自己的POM文件),当然这将打破任何形式的自动化构建环境。

Answer 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>


Answer 2:

神火会尽力确保分叉JVM尽可能从用户环境的变化孤立。 如果你想通过变薄通过你需要使用systemPropertyVariables配置选项定义分叉JVM系统属性。

其他人所说的轮廓。 在一般使用配置文件注入环境的具体细节是个不错的计划,甚至是Maven的反模式。 有一个且只有一个案例是这样的配置文件是不是一个反模式(注意我不是推广一个模式,只动了反模式类的),那是你的配置文件调整测试环境你是不是连接所述tests.jar到反应器中。 在这种情况下,当资源库中的神器被部署到回购,还是构建什么样的个人资料是活跃使用来自神器“扭捏”神器不会逃避自己的模块,使“坏事”(如不确定性本地回购或具有不同轮廓的远程回购)

我会用在命令行的系统属性,并通过它传递给使用集成测试systemPropertyVariables配置选项。

如果你想要的东西更是“Maven的方式”,你很可能需要一个Maven插件火起来是针对要测试的服务,但可以对非基于Java的服务非常困难。 见卡桑德拉- Maven的插件对于如何做这种类型的东西与基于Java的服务的例子。



文章来源: Best practice for defining machine specific resources in maven builds?