Maven过滤

时间:2011-07-08 21:06:03

标签: filtering maven-3 android-maven-plugin

我正在使用Maven(3.x)在Hudson中构建一个Android应用程序。我使用过滤/配置文件来做strings.xml文件的文本替换作为构建的一部分。

因此在strings.xml中,我将有以下条目:

<string name="app_name">${app_name}</string>

在pom.xml文件中,我有个人资料条目:

 <profiles>
    <profile>
        <id>local</id>
        <properties>
            <app_env>local</app_env>
       <app_name>Acme-loc</app_name>
        </properties>
    </profile>  
    <profile>
        <id>dev</id>
        <properties>
            <app_env>dev</app_env>
       <app_name>Acme-dev</app_name>
        </properties>
    </profile>      
    ....

当我查看* .apk时,strings.xml文件被正确替换。但是,当安装在设备中时,我看到$ {app_name}让我相信在编译app之后发生了替换。我可以指定替换发生的构建步骤吗?

2 个答案:

答案 0 :(得分:4)

在标准的maven构建中,资源过滤发生在process-resources之前,它发生在package之前。如果没有关于如何设置资源过滤以及如何构建软件包的详细信息,很难说更多。

编辑:看起来你可能正在使用android插件的generate-sources目标生成R.java文件,对吗?这很可能与生成源阶段有关。在进入later in the build的进程资源阶段之前,您的strings.xml不会被过滤。您需要确保在资源过滤发生后,android目标运行,并且它指向输出strings.xml文件,而不是源文件。

答案 1 :(得分:3)

有一个示例说明如何将Maven资源过滤应用于Maven-Android-Plugin samples中的Android资源文件,以及关于它的简短discussion

具体来看样本中的Morseflash app pom.xml。

关键点是: -

  • initialize 阶段运行资源过滤,将输出放入/target/filtered-res
  • 配置maven-android-plugin,然后从过滤后的资源目录中提取资源,例如:

<resourceDirectory>${project.build.directory}/filtered-res</resourceDirectory>