2011-10-10 2 views
14

J'ai un script ant pour gérer le processus de construction. Pour WiX, j'ai besoin de produire un nouveau guid lorsque nous produisons une nouvelle version de l'installateur. Quelqu'un at-il une idée de comment le faire dans ANT? Toute réponse qui utilise des tâches intégrées serait préférable. Mais si je dois ajouter un autre fichier, c'est bien.Existe-t-il un moyen de générer un guid dans ANT?

+1

La réponse ci-dessous fonctionnera, mais vous mentionnez que vous utilisez Wix. Selon le livre que je lis "WIX: Guide du développeur de Windows Installer XML", vous pouvez définir id comme * et Wix va générer un nouveau guide pour vous. Donc, vous pouvez simplement faire

Répondre

24

j'utiliser un scriptdef task pour définir la tâche javascript simple qui enveloppe la classe Java UUID, quelque chose comme ceci:

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

Résultat:

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

Si vous avez un raisonnablement à -date Ant installer, cela devrait fonctionner hors de la boîte.

+1

Ceci est absolument parfait. –

+0

Je n'avais aucune idée que vous pourriez faire cela; c'est bien. Merci. – duma

+2

Notez que si vous utilisez ant avec un JDK Java 8, vous pouvez rencontrer le problème suivant avec l'instruction importClass. Un simple travail consiste à l'omettre et à utiliser le nom complet de UUID sur la ligne suivante. http://stackoverflow.com/questions/22503100/java-8-javascript-engine-backwards-compatibility – Kyle

2

Si vous utilisez (ou souhaitez utiliser) groovy cela fonctionnera 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> 

Sortie

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

En utilisant groovy 2.1.5 et fourmi 1.8

+0

Si vous copiez groovy-all-x.x.x.jar dans le répertoire ant lib, vous pouvez supprimer le classpath sur la tâche groovydef. Testé avec groovy-all-2.4.6.jar et ant 1.9.4 –

Questions connexes