2013-05-28 15 views
5

Ho un file di build Ant per una libreria Java. Sembra qualcosa di simile:Come cambio la directory di destinazione del comando set di file di Ant?

<project ... ><target ... > 
<jar destfile="C:\path\to\export.jar"> 
    <manifest> ... </manifest> 
    <fileset dir="C:\path\to\bin" /> 
    <fileset dir="C:\path\to\src" /> 
    <fileset dir="C:\path\to\doc" /> 
    <zipfileset src="C:\path\to\included\library.jar" /> 
</jar> 
</target></project> 

L'unico problema è che il mio JavaDoc viene esportata direttamente nella directory principale del file jar risultante. Essentialy, mi piacerebbe qualche equivalente del comando <copydir> che può essere utilizzato all'interno del comando <jar>.

mia struttura desiderata è questo:

export.jar 
    META-INF 
    Manifest.MF 
    com 
    example 
     whatever 
     Blah.class 
     Blah.java 
    org 
    external 
     somelibrary 
     Magic.class  // contents of the included library jar file 
    doc 
    // javadoc files here 

L'attuale struttura è:

export.jar 
    META-INF 
    Manifest.MF 
    com 
    example 
     whatever 
     Blah.class 
     Blah.java 
     // some javadoc files here 
    org 
    external 
     somelibrary 
     Magic.class  // contents of the included library jar file 
    // more javadoc files here 

mia "soluzione" attuale è quella di omettere il comando documentazione <fileset>, poi, una volta che il vaso ha esportato, andare in Windows Explorer e tasto destro del mouse7-ZipApri archivio; Posso quindi lasciare la directory doc lì bene. Tuttavia, questo completamente sconfigge lo scopo di Ant come un sistema di compilazione completamente automatizzato.

Se è importante, questo file è stato originariamente generato da Eclipse con l'esportatore JAR eseguibile. Tuttavia, ovviamente ho bisogno di modificarlo per aggiungere file sorgente, ecc. Perché è una libreria e non è in realtà un jar eseguibile. L'ho esportato come un contenitore eseguibile per fare in modo che Eclipse impacchettasse nelle librerie richieste; a quanto pare le librerie sul percorso di generazione non sono disponibili per l'esportazione tramite lo standard FileExportfile JAR.

risposta

10

Un jar è in realtà un file zip. Quindi è possibile utilizzare un zipfileset. Il suo attributo prefix è quello che stai cercando.

Il comando zipfileset può accettare un file zip tramite src o una directory di file system tramite dir. Utilizzando questi ultimi, è possibile aggiungere il seguente comando:

<zipfileset dir="C:\path\to\doc" prefix="doc" /> 

Vale anche la pena notare è che zipfileset supporta tutti gli attributi di set di file. Pertanto, se si desidera includere solo un singolo file in una posizione specifica è possibile utilizzare:

<zipfileset file="C:\path\to\doc\file.txt" prefix="doc" /> 

Ulteriori approfondimenti: http://ant.apache.org/manual/Types/zipfileset.html

+0

Sono consapevole del fatto che un barattolo utilizza la compressione zip. Tuttavia, la mia cartella 'doc' non è un file zip, solo una cartella. secondo Eclipse, non esiste un prefisso 'attributo 'nel comando' fileset'. – wchargin

+1

'zipfileset' può essere utilizzato in due modi. Uno come set di file all'interno di un file zip. Uno come un set di file da includere in un file zip (o un jar, questo è lo stesso). L'ultimo è per il tuo caso d'uso. Leggi le prime righe del documento che ho indicato nella mia risposta. –

+0

Grazie! Se non ti dispiace, modificherò la tua risposta per includere un esempio di codice. – wchargin