У меня есть приложение для Android, которое построено с Maven. Использование модуля buildnumber-maven-plugin и maven-resources-plugin Я вставляю версию проекта maven и хэш-код git в AndroidManifest. create
цель buildnumber-maven-plugin запускается в фазе validate
и resources
. Цель maven-resources-plugin работает в фазе initialize
.Почему мой pom не выполняется правильно при использовании Android Studio/IntelliJ?
При построении через командную строку (с mvn install
) все работает нормально, и номер сборки отображается правильно в подготовленном манифесте.
Однако при создании через Android Studio или IntelliJ git commit hash отсутствует (свойство Maven не заменяется фактическим значением) в манифесте, но версия проекта maven.
Почему?
FYI: Android-студия запускает Maven фазы процесса-ресурсов перед Make, поэтому он должен работать.
В командной строке я использую Maven 3.0.3, поэтому это может быть проблема с версией (хотя я не могу узнать, какую версию использует IntelliJ).
Вот мой POM выстраивают элемент:
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}</directory>
<filtering>true</filtering>
<targetPath>${project.build.directory}/filtered-manifest</targetPath>
<includes>
<include>AndroidManifest.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>${maven.buildnumber.version}</version>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<shortRevisionLength>6</shortRevisionLength>
<revisionOnScmFailure>000000</revisionOnScmFailure>
</configuration>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven.resources.version}</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<androidManifestFile>${project.build.directory}/filtered-manifest/AndroidManifest.xml</androidManifestFile>
</configuration>
</plugin>
</plugins>
</build>
И versionName в моем AndroidManifest файла:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.somecompany"
android:versionCode="1"
android:versionName="${project.version}-${buildNumber}" >
Из командной строки и $ {project.version} и $ {} BuildNumber заполнены корректно с их значениями, из IntelliJ $ {buildNumber} нет и просто появляется как «$ {buildNumber}»: это указывает (поскольку я установил revisionOnScmFailure
), что плагин вообще не запускается.
Я попытался сменить цель create
на фазу initialize
(на случай, если IntelliJ пропустил validate
), но это не имело значения.
Был ли прогресс в этом вопросе? –
К сожалению, у меня еще нет; в качестве обходного пути вы можете использовать задачу «установить» maven из IntelliJ, а не «make» –