2009-08-01 11 views
21

Sono in procinto di impacchettare la mia applicazione java in un file jar. Sto usando formica ed eclissi. Devo includere effettivamente nel jar un paio di file separati, non di codice (file xml e txt) direttamente nella cartella radice, non nella stessa posizione del codice.aggiunta di risorse non di codice al file jar utilizzando Ant

Sto cercando di usare includesfile, ma questo non sembra funzionare, qui è il mio obiettivo ant:

<target name="distribute" depends="compile" includesfile="readthis.txt"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
     <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/>   
    </jar> 
</target> 

È possibile che questo funziona bene quando ho omettere l'argomento includesfile. Inoltre, ho bisogno di aggiungere più file non di codice. Questi file si trovano direttamente nella cartella del progetto root in Eclipse e non all'interno di alcun pacchetto java.

Inoltre, come potete vedere sopra, in pratica sto includendo anche il codice sorgente del jar. C'è un modo per dire al task jar di inserire il codice sorgente in una cartella separata dal codice compilato?

Come attività di compilazione o di compilazione, Ant può facilmente separare il codice sorgente dalle classi compilate. Ma c'è un modo per farlo anche all'interno di un file jar?

Mille grazie per il vostro tempo!

risposta

34

Non si dovrebbe avere un attributo includesfile in un bersaglio per cominciare, e ho il sospetto che hai frainteso il punto di esso in ogni caso - l'idea è che il file specificato con includesfile contiene modelli per i quali file includi, se non vuoi metterli nel tuo file Ant.

Mi sembra che tutto ciò che serve sia un set di file aggiuntivo contenente i file appropriati necessari. Ad esempio, per readthis.txt:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset file="readthis.txt" /> 
    </jar> 
</target> 

Vorrei anche suggerire che si crea una nuova directory per le risorse, in modo da poter fare:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset dir="${resourcesDir}" /> 
    </jar> 
</target> 

senza problemi. Ciò manterrà anche la struttura della directory più pulita, rendendo più facile trovare le cose dall'alto verso il basso.

+0

Grazie! Questo sicuramente ha aiutato. Mi stavo chiedendo se posso anche dire al task jar di separare la sorgente dalle classi compilate? Al momento, sia l'origine che le classi si trovano nella stessa struttura del pacchetto, l'attività jar non dovrebbe conservare le cartelle di output e src? Significa che quando espongo il jar, vedo in myjar/code/my/package/file.java e file.class Ho pensato che l'attività jar potesse conservare le cartelle come: myjar/code/my/package /source/file.java - e separatamente myjar/code/my/package/build/file.class Mi manca qualcosa nell'utilizzo del task jar? – denchr

+0

No, non sei corretto. Dovrebbero essere affiancati. Se il jar contiene una struttura di cartelle come code/my/package/build/file.class, ciò implicherebbe che il nome del pacchetto debba essere code.my.package.build. Potresti anche inserire i sorgenti in un secondo file JAR. –

+0

Capisco cosa intendi. Tutto ciò che sto suggerendo potrebbe avere implicazioni sul nome del pacchetto ... Quindi, in generale, se voglio includere il sorgente nel mio file jar, * deve * essere nella stessa cartella della compilazione compilata. – denchr