Tôi có một ứng dụng Android được xây dựng với Maven. Sử dụng plugin buildnumber-maven-plugin và maven-resources-plugin Tôi chèn phiên bản dự án maven và git commit hash vào AndroidManifest. Mục tiêu create
của plugin buildnumber-maven chạy trong giai đoạn validate
và mục tiêu resources
của plugin maven-resources chạy trong giai đoạn initialize
.Tại sao pom của tôi không được thực hiện đúng khi sử dụng Android Studio/IntelliJ?
Khi được xây dựng thông qua dòng lệnh (với mvn install
) tất cả đều hoạt động tốt và số bản dựng xuất hiện chính xác trong tệp kê khai được tạo.
Tuy nhiên khi xây dựng thông qua Android Studio hoặc IntelliJ git commit hash không có mặt (thuộc tính Maven không được thay thế bằng giá trị thực) trong tệp kê khai nhưng phiên bản dự án maven là.
Tại sao?
FYI: Android Studio chạy Maven giai đoạn quá trình nguồn trước khi thực hiện, vì vậy nó phải làm việc.
Trên dòng lệnh tôi đang sử dụng Maven 3.0.3, do đó, nó có thể là một vấn đề phiên bản (mặc dù tôi không thể tìm ra phiên bản IntelliJ sử dụng).
Đây là POM tôi xây dựng phần tử:
<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>
Và phiên bản trong tập tin AndroidManifest của tôi là:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.somecompany"
android:versionCode="1"
android:versionName="${project.version}-${buildNumber}" >
Từ commandline cả $ {project.version} và $ {} buildNumber được điền một cách chính xác với giá trị của chúng, từ IntelliJ $ {buildNumber} không và chỉ xuất hiện dưới dạng "$ {buildNumber}": điều này sẽ cho biết (vì tôi đã đặt revisionOnScmFailure
) rằng plugin không chạy được.
Tôi đã thử thay đổi mục tiêu create
để chạy trong giai đoạn initialize
(trong trường hợp IntelliJ bị bỏ qua validate
) nhưng điều đó không có sự khác biệt.
Có bất kỳ tiến triển nào với vấn đề này không? –
Đáng buồn là tôi chưa có; như workaround bạn có thể sử dụng nhiệm vụ "install" maven từ IntelliJ chứ không phải là "make" –