2010-11-09 6 views
0

Je voudrais faire une dépendance ant où le fichier cible dépend d'un fichier source. Comment décrivez-vous cela dans la fourmi?Est-ce que Ant prend en charge les dépendances basées sur des fichiers?

Par exemple, convertir cette cible Make à fourmis

data.txt: header1.txt body.txt footer.txt 
     cat header1.txt body.txt footer.txt > data.txt 
+1

fournissant alittle plus d'informations peut vous aider à trouver une solution, donc vous dites si le fichier A changé puis exécuter la tâche? –

Répondre

0

Ma solution simple est en ce moment à ajouter manuellement un test pour la source/âge fichier dest dans mon script shell appelé depuis exec task dans ant.

1

Vous pourriez être en mesure de faire quelque chose comme ça, mais il commence à sonner comme les scripts. Ant n'est pas un langage de script. Si vous avez beaucoup de logique "if/then/else", vous vous trompez probablement.

S'il vous plaît décrire "autres données". Est-ce qu'on parle de copier des fichiers? Est-ce un problème d'environnement devl/test/prod? Dans ce cas, vous pouvez certainement transmettre un paramètre spécifiant le nom de l'environnement et utiliser des tests conditionnels pour décider quel jeu copier. Lire this pour voir comment.

+0

Le but de la fourmi n'est-il pas de décider comment construire un projet? Cela signifie-t-il qu'il doit faire une construction complète à chaque fois? – cmcginty

+0

Ant est assez intelligent pour compiler uniquement le code qui a été touché. Pourquoi fait une construction complète chaque fois qu'un problème? Le seul problème auquel je peux penser est celui des tests unitaires de longue durée. Si c'est le cas, séparez-les. – duffymo

+0

Ce n'est pas la base de code qui me préoccupe. Mon système de build doit déployer d'autres données sur mon système pour mon application. C'est quelque chose que Make peut gérer sans effort. Si je ne peux pas faire une construction en une seule étape avec Ant, alors quelles sont les autres options? Est-il courant d'envelopper une fourmi à l'intérieur de Make? – cmcginty

1

Si vous ne souhaitez que mettre à jour les fichiers d'un répertoire par rapport à votre arborescence source, vous pouvez utiliser la tâche sync pour exécuter la tâche . Voici un exemple de base de la documentation:

<sync todir="site"> 
    <fileset dir="generated-site"/> 
</sync> 

écrase tous les fichiers le site avec fichiers les plus récents de généré site, supprime les fichiers de le site qui ne sont pas présents dans généré -site.

Si vous devez déterminer quelles ressources doivent mettre à jour afin de réaliser une opération plus complexe qu'une synchronisation, vous pouvez utiliser la ant-contriboutofdate tâche. Par exemple

<outofdate property="compile.needed" outputsourcespath="sources.for.recompile"> 
    <sourcefiles> 
     <fileset dir="${src}" includes="*.c"/> 
    </sourcefiles> 
    <mapper type="glob" dir="${src}" from="*.c" to="${obj}/*.o"/> 
</outofdate> 

tournerai compile.needed true si les fichiers objet sont hors jour par rapport à la source, et également définir le chemin sources.for.recompile une liste des seules sources qui ont besoin de recompiler - vous pouvez alors compiler uniquement pour ces sources.

(L'hypothèse ici est qu'un seul fichier dans la zone de sortie de construction est directement liée à une source.)

+0

merci, mais je suis toujours perplexe comment un design de base de Make est considéré comme un add-on à fourmi? – cmcginty

Questions connexes