2010-10-01 11 views
6

In un progetto abbiamo diversi percorsi di origine, in modo da definire un percorso di riferimento per loro:Come posso escludere file da un percorso di riferimento in Ant?

<path id="de.his.path.srcpath"> 
    <pathelement path="${de.his.dir.src.qis.java}"/> 
    <pathelement path="${de.his.dir.src.h1.java}"/> 
    ... 
</path> 

Utilizzando il riferimento funziona bene nel <javac> tag:

<src refid="de.his.path.srcpath" /> 

Nella fase successiva , dobbiamo copiare i file non-java nella cartella percorso di classe:

<copy todir="${de.his.dir.bin.classes}" overwrite="true"> 
    <fileset refid="de.his.path.srcpath"> 
     <exclude name="**/*.java" /> 
    </fileset> 
</copy> 

Purtroppo, questo non fa non funziona perché "refid" e gli elementi nidificati non possono essere mescolati.

C'è un modo per ottenere un set di tutti i file non java nel mio percorso di origine senza copiare l'elenco dei percorsi di origine in singoli set di file?

risposta

3

Ecco un'opzione. In primo luogo, utilizzare l'attività pathconvert per fare un modello atto a generare un set di file:

<pathconvert pathsep="/**/*," 
      refid="de.his.path.srcpath" 
      property="my_fileset_pattern"> 
    <filtermapper> 
     <replacestring from="${basedir}/" to="" /> 
    </filtermapper> 
</pathconvert> 

Avanti rendono il set di file da tutti i file nei percorsi, tranne le sorgenti java. Si notino le finali jolly /**/* necessari come pathconvert solo il jolly all'interno della lista, non quello necessario alla fine:

<fileset dir="." id="my_fileset" includes="${my_fileset_pattern}/**/*" > 
    <exclude name="**/*.java" /> 
</fileset> 

Allora la vostra attività di copia potrebbe essere:

<copy todir="${de.his.dir.bin.classes}" overwrite="true" > 
    <fileset refid="my_fileset" /> 
</copy> 

Per la portabilità, invece di hard-coding il jolly unix /**/* si potrebbe considerare l'utilizzo di qualcosa del tipo:

<property name="wildcard" value="${file.separator}**${file.separator}*" /> 
Problemi correlati