Maven Filtering



我正在使用Maven(3.x(在Hudson中构建一个Android应用程序。作为构建的一部分,我使用filtering/profiles对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},这让我相信替换是在编译应用程序之后发生的。我可以指定替换发生在构建的哪个步骤吗?

在标准maven构建中,资源过滤发生在进程资源上,它在编译之前,在包之前。如果没有更多关于如何设置资源筛选和如何构建包的详细信息,很难说得更多。

编辑:看起来你可能正在使用android插件的generate sources目标生成R.java文件,对吧?这很可能与生成源阶段有关。您的strings.xml直到流程资源阶段才被过滤,该阶段将在稍后的构建中出现。您需要确保android目标在资源过滤发生后运行,并且它指向输出字符串.xml文件,而不是源文件。

在Maven Android插件示例中,有一个如何将Maven资源过滤应用于Android资源文件的示例,以及关于它的简短讨论。

具体来看一下示例中的Morseflash应用程序pom.xml。

关键点是:-

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

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

最新更新