【问题标题】:Using Maven to build application for different environments (dev, staging, prod)使用 Maven 为不同的环境构建应用程序(dev、staging、prod)
【发布时间】:2013-07-09 10:50:58
【问题描述】:

假设我在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 属性。

【问题讨论】:

  • 这不是放置属性的正确位置。把它们放在android资源中。
  • 您可以制作一个脚本,每次构建项目时将您的 pom.xml 文件复制到 assets 文件夹中。然后您就可以解析它了
  • @njzk2 这个想法是这个属性对于不同的环境(构建、生产、登台)会有所不同。理想情况下,我会有不同的运行配置,启动时会读取相应的属性。如果我将它们放在 Android 资源中,有没有办法可以从运行配置中传递一个标志,以便在运行时选择适当的资源(无需手动编辑代码和更改环境)?
  • 我不确定 pom.xml 是否被打包到 .apk 文件中?我想您应该在 IDE 中定义各种运行配置并在那里设置参数。但我不确定它是否会起作用
  • @AndyRes,看看答案here 是否有帮助。总结一下,在 pom.xml 中定义你的属性,在 strings.xml 中定义一个占位符,并在项目构建图块中使用资源过滤替换 strings.xml 中的占位符。

标签: android maven


【解决方案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页面上找到更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2018-05-06
    • 2014-02-08
    • 2013-08-22
    • 2022-01-16
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多