2017-04-26 2 views
1

in meinem einfachen Gradle Build Ich möchte ShadowJar und ProGuard zusammen verwenden. Ich habe found examples, wo die Ausgabe der ShadowJar Aufgabe die Eingabe des Proguard ist, die gut funktioniert, aber in meinem Fall würde ich zuerst das kleine verschleierte Glas zuerst erstellen, wo ich die Bibliotheksabhängigkeiten schön angeben und proguard nur auf konzentrieren mein Code und dann möchte ich das an das shadowjar plugin für fatjar packaging weitergeben.Gradle ShadowJar Ausgabe enthält verschleierte und nicht verschleierte Klassen

Mein Setup ist wie folgt zusammen:

task obfuscate(type: proguard.gradle.ProGuardTask) { 
    injars jar 
    outjars "build/libs/foo-${project.version}-pg.jar" 
    ... 
} 

shadowJar { 
    from obfuscate 
    configurations = [project.configurations.embed] 
} 

shadowJar.dependsOn obfuscate 

Und mein Problem ist, dass die shadowJar Ausgabe enthält alle Bibliotheken unverschleierte (fein), mein verschleierten Code (fein) und meine unverschleierte Code. Irgendwie schleichen sich die ursprünglichen Klassen ein und ich sehe nicht, wie das passiert. Ich bin nicht in der Lage, shadowJar zu spezifizieren, um die Abhängigkeiten und das proguard Ausgabeglas zusammen zu verpacken.

Sehen Sie, wo ist das Problem in meinem Ansatz?

Antwort

0

Try this, funktioniert für mich:

task shadowJar2(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) { 
    baseName = jar.baseName 
    from obfuscate 
    configurations = [project.configurations.embed] 
    classifier = 'shadow' 
    //version = 
} 

Das Problem ist, dass die Standard-shadowJar Aufgabe Ihre 'Haupt' sourceSet zusätzlich zu den Bibliotheks Gläser verschleierten + nimmt. Indem Sie Ihre eigene benutzerdefinierte 'shadowJar2'-Aufgabe definieren, definieren Sie explizit Ihre Quellen, in diesem Fall nur jars (' obfuscate '+' embed ') und nicht ein Quellenset.

Verwandte Themen