2010-03-26 6 views
28

Comment écrire une tâche ant qui supprime des fichiers d'un fichier JAR précédemment compilé?tâche de supprimer des fichiers d'un fichier jar

Disons que les fichiers dans mon JAR sont:

aaa/bbb/ccc/Class1 
aaa/bbb/ccc/Class2 
aaa/bbb/def/Class3 
aaa/bbb/def/Class4 

... et je veux une version de ce fichier JAR sans le paquet aaa.bbb.def, et je dois dépouiller à l'aide de fourmis, de sorte que je finir avec un JAR qui contient:

aaa/bbb/ccc/Class1 
aaa/bbb/ccc/Class2 

Merci!

Répondre

55

Avez-vous essayé d'utiliser la tâche zipfileset?

<jar destfile="stripped.jar"> 
    <zipfileset src="full.jar" excludes="files/to/exclude/**/*.file"/> 
</jar> 

Par exemple:

<property name="library.dir" value="dist"/> 
<property name="library.file" value="YourJavaArchive.jar"/> 
<property name="library.path" value="${library.dir}/${library.file}" /> 
<property name="library.path.new" value="${library.dir}/new-${library.file}"/> 

<target name="purge-superfluous"> 
    <echo>Removing superfluous files from Java archive.</echo> 

    <jar destfile="${library.path.new}"> 
     <zipfileset src="${library.path}" excludes="**/ComicSans.ttf"/> 
    </jar> 

    <delete file="${library.path}" /> 
    <move file="${library.path.new}" tofile="${library.path}" /> 
</target> 
+0

Merci @mipadi pour votre réponse! J'espérais qu'il y avait une méthode sans étape intermédiaire - c'est-à-dire supprimer directement les fichiers/dossiers du Jar. A défaut de quoi je suppose que c'est le plus proche j'y arriverai! – bguiz

+0

Juste un FYI, probablement le plus le sait, mais je n'y ai pas pensé :-). La tâche "jar" va modifier le MANIFEST.MF du JAR, ce qui dans mon cas a causé des problèmes. J'ai simplement ajouté l'attribut "manifest" à la tâche jar et l'ai pointé sur le manifeste que je voulais utiliser. Bonne réponse cependant, m'a vraiment aidé, merci! – Craig

+1

Peut également utiliser 'zip' au lieu de' jar' pour éviter de changer MANIFEST.MF – npostavs

5

Vous devez unjar et rejar.

<unzip src="myjar.jar" dest="/classes/"> 
<jar destfile="newjar.jar" 
    basedir="/classes/" 
    includes="**/*" 
    excludes="**/def/*" 
/>  
1

Si un pot-fichier capable programme archiveur, comme par exemple « Zip » sur Linux, est disponible, la tâche peut être effectuée par

 
<exec executable="zip">    
<arg value="-d"/>    
<arg value="myJarCopyToStrip.jar"/>    
<arg value="aaa/bbb/def/*>    
<arg value="aaa/bbb/def> 
</exec> 

suppression de la sous-arborescence dépend des capacités du archiveur utilisé.
L'attribut "os" de la tâche Ant "exec" permet d'utiliser différents archiveurs sur différents systèmes d'exploitation.

1

Je suis venu ici à la recherche d'utiliser des fourmis comme solution de contournement quelques allées courtes dans Décompressez gradle.

sur quelqu'un d'autre de chance est dans le même bateau.

est un exemple:

task antUnzip() << { 

      ant.jar(destfile : "stripped.jar") { 
       zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") { 
       } 
      } 
} 
Questions connexes