2013-02-22 28 views
0

我想使用的版本字段的值在我的pom.xml我NSIS安裝的Windows。要做到這一點我使用nsis-maven-plugin生成一個target/project.nsh(它將包含一個適當的PROJECT_VERSION場),即然後得到!include到我setup.nsi填充VIProductVersion與NSIS-Maven的插件

這裏的問題:假設我的POM project.version爲1.2快照。 makensis將失敗與錯誤:

[MAKENSIS] Error: invalid VIProductVersion format, should be X.X.X.X 

所以,我有兩個問題:

  1. 的 「-SNAPSHOT」 串

    我可以設置VIProductVersion前場砍了下來,但是當我的版本真的不是時,我的版本會顯示爲1.2。

  2. 我的版本看起來像XX,但必須是XXXX

    硬填充兩個零(如VIProductVersion ${PROJECT_VERSION}.0.0)字段將只是當我改變我的POM project.version 1.2.1

突破

這是否有一個好的策略?

+0

看着PS3MediaServer它看起來像他們甚至不打擾定義VIProductVersion https://github.com/ps3mediaserver/ps3mediaserver/blob/384e0bb28d903dd3aa866a3828b229ccaebd41a2/src/main/external-resources/nsis/setup.nsi – 2013-02-22 22:10:37

回答

1

我不知道行傢什麼,但我可以告訴你爲什麼NSIS是這樣工作的。

您可以使用VIAddVersionKey添加任何你想要的字符串(包括「的ProductVersion」)。 VIProductVersion設置了win32/PE版本資源的fixed (VS_FIXEDFILEINFO)部分,這就是爲什麼它必須包含4個16位數字...

+0

有趣,但使用VIAddVersionKey時,VIProductVersion是必填字段。我想我可以將VIProductVersion設置爲0.0.0.0,並使用VIAddVersionKey ProductVersion「1.2-SNAPSHOT」設置實際版本... – 2013-02-26 19:15:18

+0

PE固定塊是必需的。請不要使用0.0.0。0,使用真實的數字,因爲一些應用程序可能要檢查你的版本等... – Anders 2013-02-27 17:26:53

+0

這正是問題:)這是不可能使用X.X.X.X代表1.2快照。如果我把1.2.0.0在那裏這將是一個謊言。將SNAPSHOT這個詞看作Alpha。你會如何代表1.2阿爾法? 1.2 Alpha!= 1.2.0.0。想到非alpha版本出現時的噩夢。 – 2013-02-27 17:38:57

0

我有完全相同的問題。 因爲我在我的項目中使用copy-maven-problem,我也用它與Groovy的片段,以進動project.nsh

<resource> 
    <targetPath>${project.build.directory}</targetPath> 
    <file>${project.build.directory}/installer-header.nsh</file> 
    <destFileName>installer-header-processed.nsh</destFileName> 
    <!-- groovy extension point --> 
    <process>{{ 
      def versionsList = project.version.replaceFirst("-SNAPSHOT", "").tokenize('.') 
      while(!(versionsList.size >= 4)){ 
       versionsList.add('0') 
      } 
      files[0].append("!define VI_PRODUCT_VERSION \"" + versionsList.join('.') + "\"\n") 
     }}</process> 
</resource> 
<resource> 
    <targetPath>${project.build.directory}</targetPath> 
    <file>${project.build.directory}/installer-header-processed.nsh</file> 
    <destFileName>installer-header.nsh</destFileName> 
    <move>true</move> 
</resource> 

檢查文檔到這個插件和適應變量/文件名(即我所謂的頭文件installer-header.nsh

在此之後,您可以在頭文件中使用變量VI_PRODUCT_VERSION(根據需要重命名),您可以在setup.nsi中使用該變量。

我知道這看起來像q壞的黑客,但它現在工作。我希望會有插件生成的變量在未來..

PS:調用拷貝Maven的插件前的包裝階段內NSIS - Maven的插件,爲它工作。我在nsis插件之前定義了複製插件 - 在準備包階段生成.nsh,因此它在處理之前存在。

+0

這段代碼不檢查project.version是否有第5版的元素。 – SList 2014-04-02 15:51:35