[JAVA] Verwenden Sie ProGuard mit Gradle

Ich habe ProGuard in Gradle noch nie verwendet. Notieren Sie sich daher, wie es geht.

Hinweis: In diesem Artikel geht es * nicht * um Android. Wenn es um ProGuard in Gradle geht, gibt es nur Artikel für Android, aber das ist nicht der Fall.

build.gradle

buildscript {
    dependencies {
        classpath(
                'net.sf.proguard:proguard-gradle:6.0.3'
        )
    }
}

//Unterlassung...

jar {
    manifest {
        attributes 'Main-Class': 'rip.deadcode.Main'  //Ändern Sie entsprechend Ihrer Hauptklasse
    }
    //Machen Sie Fat Jar
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

task proguard(type: proguard.gradle.ProGuardTask, dependsOn: jar) {

    def javaHome = System.getProperty('java.home')

    //JAR für Shrink
    injars jar.archivePath

    libraryjars files(
            "${javaHome}/lib/rt.jar",  //Java SE-Laufzeit
            "${javaHome}/lib/jce.jar"  //Kryptomodul
    )

    //Wenn Sie Fat JAR nicht verwenden, fügen Sie abhängige Bibliotheken zu Bibliotheksjars hinzu
//    libraryjars configurations.compile.files

    //Ausgabeziel bitte nach Belieben
    outjars("${jar.destinationDir}/proguarded.jar")

    //Klassen, die nicht schrumpfen
    keep("public class ${jar.manifest.attributes['Main-Class']} { public static void main(java.lang.String[]); }")

    dontwarn("ch.qos.logback.**")
    dontwarn('afu.org.checkerframework.**')
    dontwarn("org.checkerframework.**")
    dontwarn('org.slf4j.**')
}

//ProGuard beim Zusammenbau
assemble.dependsOn(proguard)

Punkt

ProGuard auf AWS Lambda

Ich möchte unnötigen Code so weit wie möglich entfernen, um die Geschwindigkeit beim Kaltstart zu verbessern, aber verschiedene Einstellungen sind erforderlich.

keep("public class rip.deadcode.bot.Application { *; }")  //Methode zur Implementierung von RequestHandler
keep("public interface com.amazonaws.services.lambda.runtime.RequestHandler { *; }")
keep("class com.amazonaws.** { *; }")
keep("class com.fasterxml.** { *; }")
keepattributes("Signature,*Annotation*")

Mit RequestStreamHandler scheinen viele Teile dieser Zeit kein Problem zu sein, daher ist es möglicherweise besser, es zu verwenden, anstatt es seitlich zu tragen.

Recommended Posts

Verwenden Sie ProGuard mit Gradle
Verwenden Sie WebJars mit Gradle
Verwenden Sie jlink mit gradle
Verwenden Sie log4j2 mit YAML + Gradle
Integrationstest mit Gradle
Verwenden Sie Puphpeteer mit Docker
Verwenden Sie XVim2 mit Xcode 12.0.1
Verwenden von CentOS mit LXD
Installieren Sie Gradle auf ubuntu16.04
Datenkern beginnend mit Gradle
Verwenden Sie Webmock mit Rspec
Wie benutzt man Gradle?
Beginnen Sie mit Gradle
Verwenden Sie Lambda-Ebenen mit Java
Gradle + Kotlin-Glas mit DSL generieren
Verwenden Sie Thymeleaf mit Azure-Funktionen
Verwenden Sie das pfx-Zertifikat mit Okhttp3
Verwenden Sie die Bulk-API mit RestHighLevelClient
Lombok arbeitet nicht mit Gradle5
Verwenden Sie SDKMAN! Mit Git Bash
Verwenden Sie mit Rails 6.0 mehrere Datenbanken
Verwenden Sie Spring JDBC mit Spring Boot
Verwenden Sie Ruby mit Google Colab
Verwenden Sie SpatiaLite mit Java / JDBC
Hallo Welt mit SpringBoot / Gradle
[Docker] Wird immer mit Docker + Rails verwendet
Verwenden Sie PlantUML mit Visual Studio Code
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Erstellen eines Java-Projekts mit Gradle
Verwenden Sie Java mit MSYS und Cygwin
Verwenden Sie den Konstruktor mit Argumenten in cucumber-picocontainer
Gradle
Verwenden Sie Microsoft Graph mit Standard-Java
Verwenden Sie den PostgreSQL-Inet-Typ mit DbUnit
Ich habe versucht, JOOQ mit Gradle zu verwenden
Verwenden Sie Bootstrap 4 mit PlayFramework 2.6 (kein CDN)
Ausgabe Testabdeckung mit Klee + Gradle
Ich kann Lombok nicht mit Gradle installieren.
Verwenden von Git mit SourceTree und Eclipse
Verwenden Sie Azure Bing SpellCheck mit Java
Verwenden Sie JDBC mit Java und Scala.
Verwenden Sie DataDog APM mit nicht unterstützten Frameworks
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Wie man mssql-tools mit alpine benutzt
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Verwenden von cuda11.0 mit pytorch mit Docker
Entwickeln Sie die Verarbeitung mit IntelliJ + Kotlin + Gradle
[Java] Erstellen Sie mit Gradle ein ausführbares Modul
Verwendung von BootStrap mit Play Framework
Verwenden Sie die Firebase-Echtzeitdatenbank mit Cocos Creator.
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
CICS-Java-Anwendung ausführen- (3) Build-Management mit Gradle
Verwenden Sie Symbolic Link für den mehrstufigen Build von Docker
Verwenden Sie FacesContext als Mock mit PowerMockito
[JaCoCo (Java Code Coverage)] Verwendung mit NetBeans