使用Maven为不同的环境构建应用程序(dev,staging,prod)

时间:2013-07-11 08:36:20

标签: android maven

假设我在pom.xml文件中声明了以下属性。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org
    /2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    // ....

    <properties>
        <dev.url>http://dev.mysite.com</dev.url>
        <staging.url>http://staging.mysite.com</staging.url>
        <prod.url>http://prod.mysite.com</prod.url>
    </properties>

</project>

我想要做的是,使用不同的运行配置,并根据我设置的某个标志,读取相应的属性。例如,在构建生产时,要在运行时读取prod.url属性,在构建暂存时,读取staging.url属性。

1 个答案:

答案 0 :(得分:1)

以下是我如何解决它:
我们的想法是将所有属性存储在单独的资源文件中。然后,使用maven resource plugin将相应的属性文件复制到values/environment.xml

在项目根目录中创建以下目录结构:

environment/dev/environment.xml
environment/prod/environment.xml

然后使用适当的值填充资源文件的内容。

<强> /dev/environment.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="url">http://dev.mysite.com</string>
</resources>

<强> /prod/environment.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="url">http://prod.mysite.com</string>
</resources>

通过指定应执行此操作的阶段,要复制的资源以及输出目录,将maven资源插件添加到pom.xml

//...
<plugins>
    <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
             <execution>
                <id>copy-string-resources</id>
                <phase>validate</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <resources>
                        <resource>
                            <directory>environment/${environment}/</directory>
                            <includes>
                               <include>environment.xml</include>
                               <filtering>true</filtering>
                            </includes>
                        </resource>
                    </resources>
                    <overwrite>true</overwrite>
                    <outputDirectory>${basedir}/res/values/</outputDirectory>
                </configuration>
      </plugin>
</plugins>

从这一点起,您可以创建2个运行配置:

mvn validate -Denvironment=dev
mvn validate -Denvironment=prod

除了将evironment/${environment}/environment.xml中的相应资源复制到values/environment.xml

之外什么都不做

根据运行配置,${environment}将与devprod相同。

您可以在this页面找到更多信息。