2011-10-10 125 views
14

我有一個ant腳本來管理構建過程。對於WiX我需要在生成新版本的安裝程序時生成一個新的guid。任何人有任何想法如何在ANT做到這一點?任何使用內置任務的答案都是可取的。但如果我必須添加另一個文件,那很好。有什麼辦法可以在ANT中生成GUID?

+1

下面的答案將工作,但你提到你正在使用維克斯。根據我正在閱讀的書「WIX:Windows Installer XML開發人員指南」,您可以將id定義爲*,Wix將爲您生成一個新的Guid。 所以你可以做

回答

24

我會使用一個scriptdef task定義簡單的JavaScript任務封裝了Java的UUID類,像這樣:

<scriptdef name="generateguid" language="javascript"> 
    <attribute name="property" /> 
    <![CDATA[ 
    importClass(java.util.UUID); 

    project.setProperty(attributes.get("property"), UUID.randomUUID()); 
    ]]> 
</scriptdef> 

<generateguid property="guid1" /> 
<echo message="${guid1}" /> 

結果:

[echo] 42dada5a-3c5d-4ace-9315-3df416b31084 

如果你有一個合理的先進-date Ant安裝,這應該開箱即用。

+1

這絕對是完美的。 –

+0

不知道你能做到這一點;這很棒。謝謝。 – duma

+2

請注意,如果您使用ant和Java 8 JDK,則可能會遇到以下與importClass語句相關的問題。一個簡單的解決方法是省略它,並在下一行使用UUID的完全限定名。 http://stackoverflow.com/questions/22503100/java-8-javascript-engine-backwards-compatibility – Kyle

2

如果您正在使用(或想使用)groovy,這將很好地工作。

<project default="main" basedir="."> 
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" 
     classpath="lib/groovy-all-2.1.5.jar" /> 
    <target name="main"> 
     <groovy> 
      //generate uuid and place it in ants properties map 
      def myguid1 = UUID.randomUUID() 
      properties['guid1'] = myguid1 
      println "uuid " + properties['guid1'] 
     </groovy> 
     <!--use the uuid from ant --> 
     <echo message="uuid ${guid1}" /> 
    </target> 
</project> 

輸出

Buildfile: C:\dev\anttest\build.xml 
main: 
     [groovy] uuid d9b4a35e-4a75-454c-9f15-16b4b83bc6d0 
     [echo] uuid d9b4a35e-4a75-454c-9f15-16b4b83bc6d0 
BUILD SUCCESSFUL 

使用Groovy 2.1.5和1.8螞蟻

+0

如果您將groovy-all-x.x.x.jar複製到ant lib目錄中,則可以刪除groovy taskdef上的類路徑。用groovy-all-2.4.6.jar和ant 1.9.4進行測試 –

相關問題