2012-01-27 71 views
2

我試圖使用屬性文件來讀取屬性,以在使用maven構建時將這些值設置爲apk。無法建立apk使用給定版本的maven

Pluging我已經使用 - >>>>>>

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-1</version> 
      <executions> 
       <execution> 
        <phase>initialize</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>${basedir}/buildNumber.properties</file> 
         </files> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 


<build> 
    <sourceDirectory>src</sourceDirectory> 
    <finalName>myapk.${majorversion}.${minor_version}.${patch_version}.${maven.build.timestamp}</finalName> 

文件:buildNumber.properties

major_version=01 
minor_version=00 
patch_version=00 

這產生myapk.01.00.00.20120127-2010.jar但APK是myapk $ {major_version} .a。$ {minor_version}。$ {patch_version} .20120127-2010.apk

讓我知道我在這裏失蹤..?

+0

你能再次重複一下,正在生成什麼,你期望什麼(兩個不同的文件名)?我對「.a」有點困惑。這是在你的模式中評論,但在POM模式。 – 2012-01-28 12:11:13

+0

OOps ...「a」was typo .. expetcted apk myapk.01.00.00.20120127-2010.apk 實際apk是myapk。$ {major_version}。$ {minor_version}。$ {patch_version} .20120127-2010。 apk – knocker 2012-01-28 18:10:14

+0

嗯,我明白了:apk中的佔位符在未被替換的地方。 ''隻影響jar的最終名稱,而apk插件似乎不能正確捕捉這個設置。 – 2012-01-29 09:04:03

回答

0

我不知道確切的原因,但它看起來像properties-maven-plugin可以替換在pom.xml中的屬性標記下正確定義的屬性值,而且maven只能識別在pom中明確定義的屬性名稱。 XML,下面的聚甲醛爲我工作:

<properties> 
    <!-- use property name defined in your buildNumber.properties --> 
    <external.build.version>${major_version}</external.build.version> 
</properties> 

... ... 

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <!-- use property name defined earlier in this pom.xml --> 
    <finalName>myapk.${external.build.version}</finalName> 

... ... 

編輯:
從我的角度來看,行家的預定義的構建生命週期是挺排斥尤其是與其他的構建工具,如ADT集成時,POM的版本用於生成apk的方法相當有限,此外,從plugin documentation開始,當前版本android-maven-plugin的sion不提供用於在apk目標中定製最終apk名稱的任何配置。類似的討論發佈here最終得到一個不太完美的答案。

由於上次拍攝,Android的Maven的插件提供的選項的zipalign目標的過程中定製最終APK名稱:

<plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <extensions>true</extensions> 
    <configuration> 
    <sdk> 
     <platform>13</platform> 
    </sdk> 
    <undeployBeforeDeploy>true</undeployBeforeDeploy> 
    <zipalign> 
     <verbose>true</verbose> 
     <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk> 
     <!-- directly use property name defined in external properties file here --> 
     <outputApk>${project.build.directory}/${project.artifactId}-${major_version}-aligned.apk</outputApk> 
    </zipalign> 
    </configuration> 
    <executions> 
    <execution> 
     <id>alignApk</id> 
     <phase>package</phase> 
     <goals> 
     <goal>zipalign</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

這可能是一個解決方案,如果您使用的Maven的zipalign最終的apk(我想你做),你將得到所有三個輸出文件(.ap_和.apk和.jar)以默認的$ {project.version}加上另一個以$ {major_version}對齊的apk結尾,但是隻有那三個具有默認的$ {project.version}將被安裝在maven中央倉庫中。

+0

也試過這個..只適用於jar,不適用apk的名稱.. :( – knocker 2012-01-28 07:34:56

+0

@knocker,我編輯了我的答案。 – yorkw 2012-01-29 07:26:31

+0

是的,zipalign是我的最後一個選項..謝謝:) – knocker 2012-01-29 11:39:08