2010-09-17 4 views
2

Disons que j'ai un système de fichiers qui ressemble un peu quelque chose comme ceci:Ant: fileset « dir » attribut avec un chemin complet d'exécution étendu

  • C: \ substance \ build.xml
  • C : \ choses \ myfolder \ library1.jar
  • C: \ substance \ myfolder \ library2.jar

intérieur build.xml, je veux définir un chemin qui ressemble à ceci:

<path id="some.id"> 
    <fileset dir="myfolder"> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 

Normalement, cela fonctionne bien. Toutefois, j'appelle ma propre tâche Ant personnalisée qui héritera de toutes les références (y compris le chemin "some.id") et cette tâche Ant personnalisée appellera un fichier build.xml qui réside dans une base différente. Par conséquent, l'attribut "dir" dans le groupe de fichiers n'est plus valide.

Existe-t-il un moyen de définir un "dir" tel qu'il reste valide quel que soit l'endroit où réside le second fichier build.xml?

Je veux essentiellement de faire quelque chose comme ceci:

<fileset dir="${expand.current.directory}/myfolder"> 

Alors quand je l'appelle la deuxième build.xml il comprendra que l'attribut « dir » est l'emplacement:

<fileset dir="c:\stuff\myfolder"> 

Edit: En outre, je veux une solution qui me permet de copier le projet "stuff" d'une machine à l'autre sans nécessiter de changement à la construction. Par exemple, si le projet "stuff" est sur le lecteur C: et que je copie le projet sur un lecteur D: sur une autre machine, je veux que la construction continue à fonctionner sans que je doive aller dans la construction et changer la lettre C à la lettre D.

Répondre

3

Je pense que vous êtes après la propriété ${user.dir} - qui est le répertoire de travail en cours.

Tous les java System.properties sont disponibles comme propriétés ant.

1

Option 1: Vous pouvez définir une propriété Ant.

Au beggining du fichier que vous pouvez définir cette propriété:

<property name="myproject.root.path" location="C:/stuff/"/> 

Et puis, l'utiliser:

<fileset dir="${myproject.root.path}/myfolder"> 

Option 2: Vous pouvez également définir à un externe Fichier build.properties, situé dans le même dossier que le fichier build.xml.

fichier C: \ substance \ build.properties

myproject.root.path=C:/stuff/ 

Et, pour faire usage de ce fichier, vous devez ajouter cette ligne au fichier XML Ant (recommandé avant la définition des tâches):

<property file="build.properties"/> 

une fois que vous avez ce fichier inclus, vous pouvez utiliser les propriétés le long du projet, de la même manière comme on le voit à l'option 1:

<fileset dir="${myproject.root.path}/myfolder"> 

Vous pouvez ajouter plusieurs fichiers de propriétés.

Notez que les chemins sont définis à l'aide de barres obliques et non de barres obliques inverses.

+0

Désolé, j'aurais probablement dû préciser dans ma question que je voudrais m'assurer que la solution est réellement indépendante de la machine. Si je devais copier le projet "stuff" sur une machine possédant un lecteur D:, la solution ci-dessus ne fonctionnerait pas sans mettre à jour le fichier ant/properties. Je m'excuse d'avoir oublié de l'ajouter dans mon message original. – digiarnie

+0

C'est une bonne raison de l'extraire dans un fichier de propriétés, où vous pouvez changer les valeurs dépendantes de l'environnement sans avoir besoin de réécrire votre fichier build.xml. –

+0

Une autre option pourrait être ce qui est dit par martin clayton à l'autre réponse, accéder aux propriétés d'exécution java (comme $ {user.dir}). –

Questions connexes