2011-10-10 44 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进行测试 –

相关问题