Mam aplikację na Androida, która jest zbudowana z Maven. Korzystając z buildnumber-maven-plugin i maven-resources-plugin wstawiam wersję projektu maven i mieszanie commit git do AndroidManifest. Celem create
celem buildnumber-maven-plugin jest faza validate
, a cel resources
maven-resources-plugin działa w fazie initialize
.Dlaczego mój pom nie jest poprawnie wykonany podczas używania Androida Studio/IntelliJ?
Po zbudowaniu za pomocą wiersza polecenia (z mvn install
) wszystko działa poprawnie, a numer kompilacji pojawia się poprawnie w wygenerowanym manifeście.
Jednak podczas budowania przez Android Studio lub IntelliJ nie ma wartości mieszania git commit (właściwość Maven nie jest zastępowana rzeczywistą wartością) w manifeście, ale wersja projektu maven.
Dlaczego?
FYI: Android Studio przebiega faza Maven środki procesowe przed make, więc powinien działać.
W linii poleceń używam Maven 3.0.3, więc może to być problem z wersją (chociaż nie mogę się dowiedzieć, jakiej wersji używa IntelliJ).
Oto moja POM Build elementem:
<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>
A versionName w moim AndroidManifest pliku to:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.somecompany"
android:versionCode="1"
android:versionName="${project.version}-${buildNumber}" >
Od poleceń zarówno $ {project.version} oraz $ {} są wypełnione buildNumber poprawnie z ich wartościami, z IntelliJ $ {buildNumber} nie jest i po prostu pojawia się jako "$ {buildNumber}": oznaczałoby to (odkąd ustawiłem revisionOnScmFailure
), że wtyczka w ogóle nie działa.
Próbowałem zmienić cel create
, aby uruchomić w fazie initialize
(w przypadku, gdy IntelliJ pomijał validate
), ale to nie miało znaczenia.
Czy osiągnięto postęp w tej kwestii? –
Niestety, jeszcze nie; jako obejście możesz użyć zadania "zainstaluj" z IntelliJ zamiast "make" –