2011-12-11 3 views
8

Jar Jar Links의 Ant 태스크를 사용하여 제 3 자 jar 파일 (objenesis)의 클래스를 배포 가능 jar 파일 (example.jar)에 포함합니다. Jar Jar는 원래 패키지 (org.objenesis)의 클래스를 내가 선택한 클래스로 변환합니다.Jar Jar로 빈 디렉토리 제외 링크

작동하지만 배포 가능한 jar에 빈 디렉토리를 남깁니다.

<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> 

example.jar 내용물의 샘플을 (예상)을 포함한다 :

org/thirdparty/Objenesis.class 
org/thirdparty/ObjenesisBase.class 
여기

단순화 된 build.xml 인

뿐만 아니라 이러한 빈 디렉토리 (바람직하지 않음 e) :

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

내 질문 : 이러한 빈 디렉토리를 제외하는 방법은 무엇입니까?

"zap"옵션 (listed in the doc)을 시도했지만 작동하지 않았습니다.

답변

7

이는 이슈 트래커에 나와있는 항아리 항아리에서 알려진 문제로 나타납니다 http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

이 거의 3 년 전에 제기하고 있으며 견인을 가지고 나타나지 않는 것을 감안할 때, 나는 당신의 옵션을 가정 수정을 제공하거나이 문제를 해결하는 것입니다.

예 개미 대상

복사 빈 디렉토리를 제거 개미의 지원을 활용, 그것을 해결하기 위해, 다음과 같습니다

<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> 

그것은 조금 지저분한, 그러나 당신이 원하는 것을 달성 .

+0

이것은 나를 위해 작동하는 것 같았습니다 (저는 Gradle 구문으로 변환해야했습니다). –