2013-09-04 2 views
1

Gradle이 모든 선언 및 전이 종속성을 가져 와서 출력 병에 추가하도록하려면 어떻게해야합니까? 나는 here의 약식을 사용하려고 노력하고 있지만 실제적으로 전이 의존성을 포함하지는 않습니다.Gradle : 전이 의존성을 가져오고 최소 런타임 지방 병으로 내보내기

ProGuard가 출력을 올바르게 최적화하고 축소 할 수 있도록 이러한 종속성을 포함시키고 싶습니다.

apply plugin: 'java' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile('com.itextpdf:itextpdf:5.4.3') { transitive = true } 
} 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'net.sf.proguard:proguard-gradle:4.10' 
    } 
} 

jar { 
    dependsOn configurations.runtime 
    from { 
     configurations.runtime.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
} 

task proguard(type: proguard.gradle.ProGuardTask, dependsOn: build) { 
    configurations.runtime.each { 
     println it 
    } 
    injars jar.archivePath 
    outjars 'output.jar' 
    libraryjars "${System.getProperty('java.home')}/lib/rt.jar" 

    keep "public class part1.** { * ; }" 

    //dontnote 
    //dontwarn 
    dontobfuscate 
} 

내가 http://itextpdf.com/examples/iia.php?id=12에서 코드 샘플을 사용하고,이 샘플 프로젝트의 경우 :

여기에 전이 종속성을 뽑아되지 않는 것을 보여주는 예 build.gradle입니다. POM at MavenCentral은 컴파일 종속성으로 BouncyCastle 라이브러리를 나타내지 만 위의 build.gradle은 출력 JAR에 패키지를 패키징하지 않거나 ~/.gradle 아티팩트 캐시로 가져 오지 않습니다.

경고를 사용하여 gradle proguard을 실행하면 org.bouncycastle.* 클래스가 해결되지 않아 빌드가 실패합니다. 예를 들어 :

Warning: com.itextpdf.text.pdf.security.TSAClientBouncyCastle: can't find referenced class org.bouncycastle.tsp.TimeStampTokenInfo 

가 (해제 경고는 나의 큰 프로젝트에서 다시 때문에 유사한 오류 메시지에 여기에 작동하지만) ProGuard에서이 문제를 해결 할 수없는 경우, Gradle을 축소해야하는 또 다른 방법이있다 완전 런타임 뚱뚱한 병?

답변

1

itextpdf의 POM을 보면, 모든 종속성은 테스트 종속성 또는 선택 사항입니다. 따라서 더 이상의 종속성을 선언하지 않는 한 itextpdf 자체 만 뚱뚱한 항아리에 포함됩니다.

관련 문제