2009-10-26 6 views
2

J'apprends toujours comment bien utiliser ANT, et je voulais comprendre s'il y a un moyen raisonnable de faire des tâches de fichiers, comme Rake et Make:Meilleure façon d'avoir une vraie "tâches de fichiers" dans ANT

http://martinfowler.com/articles/rake.html#FileTasks

« Avec un fichier que vous faites référence à des fichiers réels plutôt que des noms de tâches. « build/dev/rake.html » et donc « dev/rake.xml » sont des fichiers réels. le fichier html est le La sortie de cette tâche et le fichier xml est l'entrée.Vous pouvez penser à une tâche de fichier comme indiquant au système de construction comment faire le fichier de sortie - en effet c'est exactement la notion de make - vous listez les fichiers de sortie que vous voulez et dites comment les fabriquer

Une partie importante de la tâche de fichier est qu'elle n'est pas exécutée sauf si vous devez l'exécuter. Le système de construction examine les fichiers et n'exécute la tâche que si le fichier de sortie n'existe pas ou si la date de modification est antérieure au fichier d'entrée. Les tâches de fichiers fonctionnent donc très bien lorsque vous pensez à des choses au cas par cas. "

Donc, en d'autres termes, disons que je veux exécuter un binaire personnalisé et que je veux que ce binaire fonctionne si l'un des les fichiers ont été modifiés. Ceci est lié à this question, mais je ne veux pas courir le binaire du tout, non seulement passer une partie de l'ensemble de fichiers (il n'y a qu'un seul dans l'ensemble de fichiers et je ne veux pas l'outil à courir du tout)

La solution idéale ne serait pas aussi une chose looooooongues, mais pourrait être facilement appliquée à toute cible -. en utilisant peut-être un peu de JavaScript ANT ou tâche personnalisée

Répondre

1

Utilisez ant-contrib outofdate task?. Il a exactement les propriétés que vous demandez. Voici ant-contrib website.

Voici un modèle sur la façon de l'intégrer dans votre construction:

<taskdef 
    resource="net/sf/antcontrib/antlib.xml" 
> 
    <classpath> 
    <pathelement location="${ant-contrib.jar}"/> 
</taskdef> 

<outofdate> 
<sourcefiles path="dev/rake.xml"/> 
<targetfiles path="build/dev/rake.html"/> 
<sequential> 
    ... do your work here ... 
    ... will only run if rake.html is older than rake.xml ... 
</sequential> 
</outofdate> 
Questions connexes