2009-10-08 9 views
0

J'ai un ensemble de fichiers d'entrée, dont chacun est traité pour générer un fichier de sortie. Dans un cas, il s'agit de fichiers hibernate xml en entrée, et de fichiers java en sortie, mais ce n'est pas le seul cas que j'ai à traiter. En make, j'aurais mis en place une règle pour lui dire comment générer un fichier .java à partir d'un fichier .hbm.xml (modulo le .hbm.xml en spécifiant un nom de classe différent à générer), et en modifiant un Les fichiers .hbm.xml uniques déclenchent la génération d'un seul fichier .java.Dépendances par fichier dans ant

Comment puis-je exprimer les dépendances dans ant afin de ne construire que les fichiers .java obsolètes et pas tous simplement parce qu'un fichier .hbm.xml a changé?

Je regarde apply et up-to-date, mais ne pas voir encore une solution ...

+0

Donc, chaque fois lors de la construction vous générez un nouveau fichier .java pour chaque fichier .hbx.xml, et parce que Ant voit le changement horodatages comme nouveau la build est déclenché pour tous les fichiers .java. Est-ce correct? – Steve

+0

Cela arrive aussi, mais la première étape consiste à générer uniquement les fichiers .java qui doivent l'être; Je ne veux pas que la construction fasse plus que ce qu'elle doit. – retracile

Répondre

2

Avez-vous regardé ant-contrib outofdate task?

L'exemple à la fin de la doc ressemble à quelque chose que vous pouvez utiliser:

<outofdate property="manual.outofdate" 
      outputsources="grammer.sources"> 
    <sourcefiles> 
     <fileset dir="${src.grammer}" includes="**/*.y"/> 
    </sourcefiles> 
    <mapper type="glob" dir="${src.grammer}" from="*.y" to="${gen.grammer}/*.c"/> 
    <mapper type="glob" dir="${src.grammer}" from="*.y" to="${gen.grammer}/*.h"/> 
    <sequential> 
     <shellscript shell="bash"> 
     cd ${gen.grammer} 
     for g in ${grammer.sources} 
     do 
      gengrammer $g 
     done 
     </shellscript> 
    </sequential> 
    </outofdate> 

Notez également que vous pouvez utiliser ant-contrib "for" task dans le corps de la tâche outofdate.

Pour initialiser ant-contrib faire ceci:

<property name="ant-contrib.jar" location="..."/> 
<taskdef 
    resource="net/sf/antcontrib/antlib.xml" 
    uri="http://ant-contrib.sourceforge.net" 
> 
    <classpath> 
    <pathelement location="${ant-contrib.jar}"/> 
    </classpath> 
</taskdef> 
+0

Juste pour clarifier, si un sous-ensemble des sources est obsolète, alors la propriété nommée par 'outputsources' est définie à une liste de _juste ces sources et pas toutes les sources, correct? – retracile

+0

Correct, 'sortiesources' ne répertorie que les sources plus récentes que les cibles respectives. –

Questions connexes