2011-12-11 6 views
8

J'utilise une tâche Ant de Jar Jar Links pour incorporer des classes d'un fichier jar tiers (objenesis) dans mon fichier JAR distribuable (exemple.jar). Jar Jar traduira les classes du package original (org.objenesis) à l'un de mes choix.Exclure des répertoires vides avec des liens Jar Jar

Cela fonctionne mais laisse des répertoires vides dans le fichier jar distribuable.

Voici un build.xml simplifié:

<target name="jar" depends="compile"> 
    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" 
     classpath="lib/jarjar-1.1.jar"/> 

    <jarjar jarfile="dist/example.jar" excludes="org.objenesis.**"> 
     <fileset dir="build/classes/main"/> 
     <zipfileset src="lib/objenesis-1.2.jar"/> 
     <rule pattern="org.objenesis.**" result="[email protected]"/> 
    </jarjar> 
</target> 

Un échantillon de contenu du example.jar comprend (comme prévu):

org/thirdparty/Objenesis.class 
org/thirdparty/ObjenesisBase.class 

mais aussi ces répertoires vides (undesirabl e):

org/objenesis/ 
org/objenesis/instantiator/ 
org/objenesis/instantiator/basic/ 

Ma question: comment exclure ces répertoires vides?

J'ai essayé l'option "zap" (listed in the doc), mais cela n'a pas fonctionné.

Répondre

7

Cela semble être un problème connu dans Jar Jar, énumérés dans leur tracker numéro: http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

Étant donné que cela a été soulevé il y a presque trois ans, et ne semble pas avoir eu une traction, je suppose que vos options sont de contribuer à une solution, ou de contourner ce problème.

Un exemple cible Ant pour travailler autour d'elle, en profitant du soutien de Ant pour la suppression des répertoires vides sur la copie, serait:

<target name="unpolluted-jarjar" description="JarJars without empty directories"> 
    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${location.lib}/build/jarjar-1.2.jar"/> 
    <jarjar basedir="${location.classes}" destfile="${location.dist.binaries}/my-app.jar"> 
     <zipfileset src="${location.lib}/shipped/dependency.jar"/> 
     <rule pattern="com.example.dependency.**" result="[email protected]"/> 
    </jarjar> 
    <mkdir dir="${location.dist.binaries}/exploded"/> 
    <unzip src="${location.dist.binaries}/my-app.jar" dest="${location.dist.binaries}/exploded/my-app.jar"/> 
    <copy includeemptydirs="false" todir="${location.dist.binaries}/unpolluted/my-app.jar"> 
     <fileset dir="${location.dist.binaries}/exploded/my-app.jar"/> 
    </copy> 
    <jar destfile="${location.dist.binaries}/my-app-unpolluted.jar"> 
     <fileset dir="${location.dist.binaries}/unpolluted/my-app.jar"/> 
    </jar> 
</target> 

Il est un peu crasseux, mais il réalise ce que vous voulez .

+0

Cela a semblé fonctionner pour moi (j'ai dû convertir en syntaxe Gradle). –

Questions connexes