我有一個使用Maven構建的Android應用程序。 使用buildnumber-maven-plugin和maven-resources-plugin我將maven項目版本和git commit hash插入到AndroidManifest中。 buildnumber-maven-plugin的create
目標在validate
階段運行,並且 maven-resources-plugin的目標運行在initialize
階段。爲什麼在使用Android Studio/IntelliJ時不能正確執行我的pom?
通過命令行(使用mvn install
)構建時,所有工作都正常,並且內部版本號在生成的清單中正確顯示。
但是,當通過Android Studio或IntelliJ構建時,清單中不存在git commit hash(Maven屬性不會用實際值替換),但maven項目版本爲。
爲什麼?
FYI:Android的一個工作室製作之前運行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>
而且中的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
的情況下),但這沒有什麼區別。
這個問題有什麼進展? –
可悲的是我還沒有;作爲解決方法,您可以使用IntelliJ中的maven「install」任務而不是「make」 –