Maven 过滤

发布于 2024-11-19 02:05:40 字数 855 浏览 3 评论 0原文

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

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

${app_name}

在 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} 这让我相信替换是在应用程序编译后发生的。我可以指定替换发生在构建的哪个步骤吗?

I am using Maven (3.x) to build an Android application within Hudson. I use filtering/profiles to do text substition of the strings.xml file as part of the build.

So within the strings.xml, I will have entries such as:

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

Within the pom.xml file, I have profile entries:

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

When I look inside the *.apk, the strings.xml file is substituted correctly. However, when installed in device, I see ${app_name} which leads me to believe that the substitution is happening after the compile of app. Can I specify which step of the build the substitution happens?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心房敞 2024-11-26 02:05:40

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

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

In a standard maven build, resource filtering happens at process-resources, which comes before compile, which comes before package. It's hard to say more without more details about how you have resource filtering set up and how your package is built.

Edit: It looks like you're probably generating the R.java file using the android plugin's generate-sources goal, right? That's most likely bound to the generate-sources phase. Your strings.xml doesn't get filtered until the process-resources phase, which comes later in the build. You need to make sure that the android goal runs after the resource filtering happens and that it points at the output strings.xml file, not the source file.

远昼 2024-11-26 02:05:40

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

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

关键点是:-

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

${project.build.directory}/filtered-res

There is an example of how to apply Maven resource filtering to Android resource files in the Maven-Android-Plugin samples, and also a brief discussion about it.

Specifically have a look at the Morseflash app pom.xml in the samples.

The key points are:-

  • run resource filtering during the initialize phase, putting the output into /target/filtered-res
  • configure the maven-android-plugin to then pickup it's resources from the filtered resources directory e.g.:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文