Не могу собрать apk используя maven с заданной версией в названии - PullRequest
2 голосов
/ 27 января 2012

Я пытался использовать файл свойств для чтения свойств, чтобы установить эти значения в apk при сборке с использованием maven.

Включение я использовал - >>>>>>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>${basedir}/buildNumber.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>


<build>
    <sourceDirectory>src</sourceDirectory>
    <finalName>myapk.${majorversion}.${minor_version}.${patch_version}.${maven.build.timestamp}</finalName>

Файл: buildNumber.properties

major_version=01
minor_version=00
patch_version=00

Это генерирует myapk.01.00.00.20120127-2010.jar, но apk это myapk. $ {Major_version} .a. $ {Minor_version}. $ {Patch_version} .20120127-2010.apk

Дайте мне знать, что мне здесь не хватает ..?

1 Ответ

0 голосов
/ 28 января 2012

Я не знаю точной причины, но похоже, что properties-maven-plugin может заменить значение свойства, правильно определенное в теге properties в pom.xml, а maven может распознавать только имя свойства, явно определенное в pom.xml.у меня работает следующий pom:

<properties>
  <!-- use property name defined in your buildNumber.properties -->
  <external.build.version>${major_version}</external.build.version>
</properties>

... ...

<build>
  <sourceDirectory>src</sourceDirectory>
  <!-- use property name defined earlier in this pom.xml -->
  <finalName>myapk.${external.build.version}</finalName>

... ...

РЕДАКТИРОВАТЬ:
С моей точки зрения, предопределенный жизненный цикл сборки maven довольно эксклюзивен, особенно при интеграции с другими инструментами сборкиподобно ADT, версия pom, используемая для генерации apk, довольно ограничена, кроме того, из документации для плагина , текущая версия android-maven-plugin не предоставляет никакой конфигурации для настройки окончательного имени apk во время apk goal,Подобное обсуждение было опубликовано здесь в итоге получился не очень идеальный ответ.

В качестве последнего снимка, android-maven-plugin предоставляет опции для настройки окончательного имени apk во время цели zipalign:

<plugin>
  <groupId>com.jayway.maven.plugins.android.generation2</groupId>
  <artifactId>android-maven-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <sdk>
      <platform>13</platform>
    </sdk>
    <undeployBeforeDeploy>true</undeployBeforeDeploy>
    <zipalign>
      <verbose>true</verbose>
      <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk>
      <!-- directly use property name defined in external properties file here -->
      <outputApk>${project.build.directory}/${project.artifactId}-${major_version}-aligned.apk</outputApk>
    </zipalign>
  </configuration>
  <executions>
    <execution>
      <id>alignApk</id>
      <phase>package</phase>
      <goals>
        <goal>zipalign</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Это может быть решением, если вы используете maven zipalign в своем последнем apk (я полагаю, вы используете), вы получите все три выходных файла (.ap_ и .apk и .jar), заканчивающиеся на значение по умолчанию ${project.version} плюс еще один apk, заканчивающийся на $ {major_version} -aligned, однако в центральном репозитории maven будут установлены только те три с $ {project.version} по умолчанию.

...