1

Gradle が宣言された推移的な依存関係をすべてフェッチし、それらを出力 jar に追加するようにするにはどうすればよいですか? hereで説明されているレシピを使用しようとしていますが、実際には推移的な依存関係が含まれていないようです。

ProGuard が出力を適切に最適化および縮小できるように、これらの依存関係を含めたいと思います。

build.gradle推移的な依存関係がプルされていないことを示す例を次に示します。

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のコード サンプルを使用しています。MavenCentralのPOMは、BouncyCastle ライブラリをコンパイルの依存関係として示していますが、上記はそれらを出力 JAR にパッケージ化したり、アーティファクト キャッシュbuild.gradleにプルしたりしません。~/.gradle

その結果、警告を有効にして実行すると、クラスが解決されないgradle proguardためにビルドが失敗します。org.bouncycastle.*例えば:

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

ProGuard でこの問題を解決できない場合 (ここでは警告を無効にすることはできますが、同様のエラー メッセージが原因で私のより大きなプロジェクトでは機能しません)、Gradle でフル ランタイムの fat-jar を縮小する別の方法はありますか?

4

1 に答える 1

1

の POMを見るとitextpdf、すべての依存関係はテスト依存関係またはオプションのいずれかです。したがって、さらに依存関係を宣言しない限り、itextpdfそれ自体のみがファット Jar に含まれます。

于 2013-09-04T23:41:56.150 に答える