Maven Filtering - PullRequest
       11

Maven Filtering

2 голосов
/ 09 июля 2011

Я использую Maven (3.x) для создания приложения Android в Hudson. Я использую фильтрацию / профили, чтобы сделать текстовую подстановку файла 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}, что наводит меня на мысль, что замена происходит после компиляции приложения. Могу ли я указать, на каком этапе сборки происходит подстановка?

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

В стандартной сборке maven фильтрация ресурсов происходит по процессам-ресурсам, которые предшествуют компиляции, которая предшествует пакету. Трудно сказать больше без подробностей о том, как настроена фильтрация ресурсов и как собран ваш пакет.

Редактировать: Похоже, вы генерируете файл R.java с помощью generate-sources цели плагина Android, верно? Скорее всего, это связано с фазой создания источников. Ваш strings.xml не фильтруется до фазы ресурсов процесса, которая наступает позже в сборке . Вам необходимо убедиться, что цель android выполняется после , когда происходит фильтрация ресурсов, и что она указывает на выходной файл strings.xml, а не на исходный файл.

3 голосов
/ 24 августа 2011

Пример применения фильтрации ресурсов Maven к файлам ресурсов Android в примерах Подключаемый модуль-Android-плагин , а также краткое обсуждение об этом.

В частности, посмотрите примеры приложения Morseflash pom.xml.

Ключевые моменты: -

  • запустить фильтрацию ресурсов во время фазы initialize, поместив вывод в /target/filtered-res
  • сконфигурируйте плагин maven-android-plugin, чтобы затем забрать его ресурсы из каталога отфильтрованных ресурсов, например:

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

...