8

Jar Jar LinksのAntタスクを使用して、サードパーティのjarファイル(objenesis)のクラスを配布可能なjarファイル(example.jar)に埋め込みます。Jar Jarは、クラスを元のパッケージ(org.objenesis)から私の選択したパッケージの1つに変換します。

動作しますが、配布可能なjarに空のディレクトリが残ります。

簡略化されたbuild.xmlは次のとおりです。

<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="org.thirdparty.@1"/>
    </jarjar>
</target>   

example.jarのコンテンツのサンプルには、(予想どおり)次のものが含まれます。

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

しかし、これらの空のディレクトリ(望ましくない):

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

私の質問:これらの空のディレクトリを除外するにはどうすればよいですか?

「zap」オプション(ドキュメントに記載)を試しましたが、うまくいきませんでした。

4

1 に答える 1

7

これは、Jar Jar の既知の問題であると思われ、問題トラッカーに記載されています: http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

これはほぼ 3 年前に提起されたものであり、牽引力がないように見えることを考えると、あなたの選択肢は修正に貢献するか、それを回避することだと思います.

コピー時に空のディレクトリを削除するための Ant のサポートを利用して、これを回避する Ant ターゲットの例は次のようになります。

<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="com.example.my-app.jarjar.com.example.dependency.@1"/>
    </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>

少し汚いですが、あなたが望むものを達成します。

于 2012-04-06T12:12:13.020 に答える