2011-10-10 15 views
14

Tengo un script ant para gestionar el proceso de compilación. Para WiX, necesito producir un nuevo guid cuando generemos una nueva versión del instalador. ¿Alguien tiene alguna idea de cómo hacer esto en ANT? Cualquier respuesta que use tareas integradas sería preferible. Pero si tengo que agregar otro archivo, está bien.¿Hay alguna forma de generar un guid en ANT?

+1

a continuación La respuesta va a funcionar, pero se menciona que está utilizando Wix. De acuerdo con el libro que estoy leyendo "WIX: una guía del desarrollador de Windows Installer XML" puede definir id como * y Wix generará un nuevo Guid para usted. Así que puede hacer

Respuesta

24

que haría uso de un scriptdef task para definir tareas Javascript simple que envuelve la clase Java UUID, algo como esto:

<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}" /> 

Resultado:

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

Si usted tiene un razonablemente al fecha de instalación Ant, esto debería funcionar fuera de la caja.

+1

Esto es absolutamente perfecto. –

+0

No tenía idea de que pudieras hacer esto; esto es genial. Gracias. – duma

+2

Tenga en cuenta que si está usando ant con un JDK de Java 8, puede encontrarse con el siguiente problema con la sentencia importClass. Un simple trabajo es omitirlo y usar el nombre completo de UUID en la siguiente línea. http://stackoverflow.com/questions/22503100/java-8-javascript-engine-backwards-compatibility – Kyle

2

Si está utilizando (o le gustaría usar) groovy, esto funcionará muy bien.

<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> 

salida

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

Usando 2.1.5 maravilloso y la hormiga 1,8

+0

Si copia groovy-all-x.x.x.jar en el directorio ant lib, puede eliminar el classpath en el maravilloso taskdef. Probado con groovy-all-2.4.6.jar y horm 1.9.4 –

Cuestiones relacionadas