Question

J'ai un script de construction et dans le cadre de ce script il copie un fichier jar à un répertoire, pour faciliter l'appelons cela le utils jar.le utils pot est construit par un autre script de construction assis dans un autre répertoire.Ce que j'essaie de faire avoir mon script de construction exécuter le utils script de construction afin de m'assurer de la utils pot est jusqu'à ce jour.

Donc, je sais que j'ai besoin d'importer le dossier utils fichier build.

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

Ce qui ne fonctionne pas parce que la tâche d'importation, contrairement à presque tous les autres ant taks, ne courent pas de basedir, il s'exécute à partir de la ddt.Donc, pour obtenir autour de ce que j'ai cette petite chansonnette, qui n'a réussi à importer le fichier de build

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

Alors, maintenant que ive a résolu mon problème d'importation, je dois appeler la tâche, ainsi que doit être facile à droite:

<antcall target="utils.package" />

remarque que ci-dessus, utils est le nom du projet de ../utils/build/build.xml

le problème, je vais maintenant en cours d'exécution en est que la fourmi d'appel ne s'est pas exécuté dans ../utils/construction de ce dont j'ai besoin, et je ne trouve pas, est une propriété runat ou quelque chose de similaire, en substance:

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

La raison j'ai besoin c'est que dans mon utils construire le fichier de l'étape pour sélectionner le code à copier pour le pot est basé sur des chemins relatifs, de manière à éviter de coder en dur les chemins d'accès dans mon ant fichier.Des idées?

Était-ce utile?

La solution

J'ai quelque chose de similaire mis en place:J'ai une Fourmi principale build.xml qui appelle séparé build.xml qui prend soin de la construction de mes tests.C'est comment je le fais:

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

L'astuce est d'utiliser subant au lieu de antcall.Vous n'avez pas à importer les autres build fichier.

Autres conseils

Essayez d'utiliser l' "la fourmi" de la tâche au lieu de "antcall" de la tâche, qui gère le importées de construire directement au lieu de l'importer dans la version actuelle du fichier.Il a un "dir" paramètre:

le répertoire à utiliser comme un basedir pour le nouveau projet Ant.Par défaut le projet actuel est basedir, à moins que inheritall a été définie à false, dans auquel cas il n'a pas un défaut de la valeur.Cela va remplacer le basedir configuration du projet.

De sorte que vous pouvez faire:

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

ou quelque chose comme ça.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top