Maven으로 제작 된 Android 애플리케이션이 있습니다. buildnumber-maven-plugin과 maven-resources-plugin을 사용하여 AndroidManifest에 maven 프로젝트 버전과 git commit 해시를 삽입합니다. buildnumber-maven-plugin의 create
목표는 validate
단계에서 실행되며, maven-resources-plugin의 resources
목표는 initialize
단계에서 실행됩니다.Android Studio/IntelliJ 사용시 pom이 올바르게 실행되지 않는 이유는 무엇입니까?
명령 줄 (mvn install
)을 통해 빌드 할 때 모든 것이 올바르게 작동하고 빌드 번호가 생성 된 매니페스트에 올바르게 나타납니다.
그러나 Android Studio 또는 IntelliJ를 통해 빌드 할 때 매니페스트에는 git commit 해시가 존재하지 않지만 (Maven 속성은 실제 값으로 대체되지 않음) maven 프로젝트 버전은 존재합니다.
왜?
는 참고 : 안드로이드 Studio는 만들기 전에 메이븐 위상 프로세스 자원을 실행, 그래서 작동합니다.
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을 수 있습니다 : 가득 커맨드 $ {project.version} 모두와 $ {buildNumber}에서
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.somecompany"
android:versionCode="1"
android:versionName="${project.version}-${buildNumber}" >
IntelliJ $ {buildNumber}의 값이 올바르게 표시되지 않고 "$ {buildNumber}"로 표시됩니다. 이는 (revisionOnScmFailure
을 설정했기 때문에) 플러그인이 전혀 실행되지 않는다는 것을 나타냅니다.
목표를 initialize
단계 (IntelliJ가 validate
을 건너 뛰었을 때를 대비하여)로 변경하려고 시도했지만 아무런 차이가 없습니다.
이 문제와 관련하여 어떤 진전이 있었습니까? –
슬프게도 나는 아직 안왔다. 해결 방법으로 "make"가 아닌 IntelliJ에서 maven "install"작업을 사용할 수 있습니다. –