2009-02-05 13 views
20

Ho un progetto che deve accedere alle risorse all'interno del proprio file JAR. Quando creo il file JAR per il progetto, vorrei copiare una directory in quel file JAR (suppongo che l'equivalente ZIP possa "aggiungere" la directory al file ZIP esistente). Voglio solo che la copia avvenga dopo che il JAR è stato creato (e ovviamente non voglio che la copia accada se pulisco ed elimini il file JAR).Come si copiano i file in un JAR esistente con Ant?

Attualmente il file di generazione si presenta così:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="foobar" basedir=".." default="jar"> 

    <!-- project-specific properties --> 
    <property name="project.path" value="my/project/dir/foobar" /> 

    <patternset id="project.include"> 
     <include name="${project.path}/**" /> 
    </patternset> 
    <patternset id="project.jar.include"> 
     <include name="${project.path}/**" /> 
    </patternset> 

    <import file="common-tasks.xml" /> 

    <property name="jar.file" location="${test.dir}/foobar.jar" />  
    <property name="manifest.file" location="misc/foobar.manifest" /> 
</project> 

Alcune delle attività di compilazione sono chiamati da un altro file (common-tasks.xml), che non riesco a visualizzare qui.

+0

Perché non aggiungere le risorse solo quando si crea il file JAR? Questo è quello che faccio in build dove ho file JAR che includono risorse non di codice al loro interno. – Eddie

+0

Poiché l'attività definita per la creazione del file JAR è definita in un altro file che non posso modificare. – troyal

+0

Questo lo farebbe! Oh bene. Sono felice che altri abbiano risposto in modi che risolvono il tuo problema. – Eddie

risposta

12

Le attività Jar/Ear Ant sono le sottoattività del più generale Zip task. Ciò significa che è possibile utilizzare anche zipfileset nel vostro compito Jar:

<jar destfile="${jar.file}" basedir="..."> 
    <zipfileset dir="${project.path}" includes="*.jar" prefix="libs"/> 
</jar> 

Ho visto anche che si definisce un file manifesto distinto per l'inclusione nel barattolo. È inoltre possibile utilizzare un comando nidificato manifest:

<jar destfile="@{destfile}" basedir="@{basedir}"> 
    <manifest> 
     <attribute name="Built-By" value="..."/> 
     <attribute name="Built-Date" value="..."/> 

     <attribute name="Implementation-Title" value="..."/> 
     <attribute name="Implementation-Version" value="..."/> 
     <attribute name="Implementation-Vendor" value="..."/> 
    </manifest> 
</jar> 
4

Un modo è quello di utilizzare i compiti Ant:

  1. Unzip - per esplodere il vaso è una cartella temporanea
  2. Copy - di copiare la cartella che si desidera la cartella Temp, e
  3. Jar - con 'update' impostato su true, per impacchettare la cartella temporanea nel file jar originale.

The Ant Manual ha esempi di come farlo.

+0

@Handerson: Yeap +1 – OscarRyz

+0

Vorrei evitare questo metodo se possibile. Ho visto un modo per fare ciò che voglio, ma non riesco a ricordare i dettagli. – troyal

17
<jar update="true"> 
... 
</jar> 
+5

Non sono sicuro di cosa sia effettivamente nel "..." – troyal

Problemi correlati