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 を縮小する別の方法はありますか?