2008-08-12 9 views
26

J'ai un script de construction et dans le cadre de ce script, il copie un fichier jar dans un répertoire, pour plus de facilité, appelons le jar utils. le jar utils est construit par un autre script de construction assis dans un autre répertoire. Ce que j'essaie de faire, c'est que mon script de construction lance le script de construction d'utils afin que je puisse m'assurer que le pot d'utils est à jour. Donc, je sais que j'ai besoin d'importer le fichier de construction utils.Ant scripts de construction, antcall, dépendances, etc

<import file="../utils/build/build.xml" /> 

Ce qui ne fonctionne pas parce que la tâche d'importation, à la différence presque tous les autres taks fourmi, ne fonctionne pas de basedir, il va du PWD. Donc, pour se déplacer que j'ai cette petite chansonnette, qui n'importe avec succès le fichier de construction

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 

Alors maintenant que je aie résolu mon problème d'importation que je dois appeler la tâche, bien que cela devrait être facile à droite:

<antcall target="utils.package" /> 

noter qu'en ce qui précède, utils est le nom du projet de ../utils/build/build.xml

le problème que je suis en maintenant en est que l'appel fourmi n'exécute pas. ./utils/build donc ce dont j'ai besoin, et ne peux pas trouver, c'est une propriété runat ou quelque chose de similaire, essentiellement:

<antcall target="utils.package" runat="../utils/build" /> 

La raison pour laquelle j'ai besoin est que dans mes utils construire fichier l'étape pour sélectionner le code à copier dans le pot est basé sur des chemins relatifs afin d'éviter les chemins hardcoding dans mon fichier de fourmi. Des idées?

Répondre

33

J'ai quelque chose de similaire: J'ai un fichier build.xml Ant qui appelle un build.xml séparé qui s'occupe de construire mes tests. Voici comment je le fais:

<target name="build-tests"> 
    <subant target="build"> 
     <fileset dir="${test.home}" includes="build.xml"/> 
    </subant> 
</target> 

L'astuce consiste à utiliser subant au lieu de antcall. Vous n'avez pas à importer l'autre fichier de construction.

+0

Et si vous avez besoin d'ajuster le classpath dans la cible subant? –

6

Essayez d'utiliser le "ant" task au lieu de la tâche "antappel", qui exécute la construction importée directement au lieu de l'importer dans le fichier de construction actuel. Il a un paramètre "dir":

le répertoire à utiliser comme base pour le nouveau projet Ant. Par défaut, basedir du projet actuel, sauf si inheritall a été défini sur false, dans , auquel cas il n'a pas de valeur par défaut . Cela remplacera le paramètre du projet appelé.

Vous pourriez faire:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" /> 

ou quelque chose comme ça.

+2

Faites que

0

Vous pouvez transmettre des paramètres à antcall en utilisant imbriqué dans le bloc antcall. Donc, vous pouvez passer les propriétés de cette façon (probablement même basedir puisque les propriétés sont immuables).

Questions connexes