Maven でビルドされた Android アプリケーションがあります。buildnumber-maven-plugin と maven-resources-plugin を使用して、maven プロジェクト バージョンと git commit ハッシュを AndroidManifest に挿入します。create
buildnumber-maven-plugin のゴールはフェーズで実行され、validate
maven resources
-resources-plugin のゴールはフェーズで実行されinitialize
ます。
コマンドラインを使用して ( を使用してmvn install
) ビルドすると、すべて正常に動作し、作成されたマニフェストにビルド番号が正しく表示されます。
ただし、Android Studio または IntelliJ を介してビルドする場合、マニフェストには git コミット ハッシュは存在しません (Maven プロパティは実際の値に置き換えられません) が、Maven プロジェクト バージョンは存在します。
なんで?
参考までに: Android Studio は Make の前に Maven フェーズのプロセス リソースを実行するため、動作するはずです。
コマンドラインでは 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>
そして、私の AndroidManifest ファイルの versionName は次のとおりです。
<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
)、違いはありませんでした。