[JAVA] Utiliser ProGuard avec Gradle

Je n'ai jamais utilisé ProGuard dans Gradle, alors notez comment le faire.

Remarque: cet article ne concerne * pas * Android. En ce qui concerne ProGuard dans Gradle, il n'y a que des articles pour Android, mais ce n'est pas le cas.

build.gradle

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

//Omission...

jar {
    manifest {
        attributes 'Main-Class': 'rip.deadcode.Main'  //Modifiez en fonction de votre classe principale
    }
    //Faire un pot de graisse
    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 pour Shrink
    injars jar.archivePath

    libraryjars files(
            "${javaHome}/lib/rt.jar",  //Runtime Java SE
            "${javaHome}/lib/jce.jar"  //module crypto
    )

    //Si vous n'utilisez pas Fat JAR, ajoutez des bibliothèques dépendantes aux libraryjars
//    libraryjars configurations.compile.files

    //Destination de sortie s'il vous plaît comme vous le souhaitez
    outjars("${jar.destinationDir}/proguarded.jar")

    //Classes qui ne rétrécissent pas
    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 lors de l'assemblage
assemble.dependsOn(proguard)

point

ProGuard sur AWS Lambda

Je voudrais supprimer le code inutile autant que possible pour améliorer la vitesse au démarrage à froid, mais divers paramètres sont nécessaires.

keep("public class rip.deadcode.bot.Application { *; }")  //Méthode implémentant RequestHandler
keep("public interface com.amazonaws.services.lambda.runtime.RequestHandler { *; }")
keep("class com.amazonaws.** { *; }")
keep("class com.fasterxml.** { *; }")
keepattributes("Signature,*Annotation*")

Avec RequestStreamHandler, il semble que de nombreuses parties de ce temps ne seront pas un problème, il peut donc être préférable de l'utiliser au lieu de le porter sur le côté.

Recommended Posts

Utiliser ProGuard avec Gradle
Utiliser les WebJars avec Gradle
Utilisez jlink avec gradle
Utilisez log4j2 avec YAML + Gradle
Test d'intégration avec Gradle
Utiliser Puphpeteer avec Docker
Utilisez XVim2 avec Xcode 12.0.1
Utilisation de CentOS avec LXD
Installez Gradle sur ubuntu16.04
Data Nucleus commençant par Gradle
Utiliser Webmock avec Rspec
Comment utiliser Gradle
Commencez avec Gradle
Utiliser des couches Lambda avec Java
Pot Gradle + Kotlin-Generate avec DSL
Utiliser Thymeleaf avec Azure Functions
Utiliser le certificat pfx avec Okhttp3
Utiliser l'API Bulk avec RestHighLevelClient
Lombok ne fonctionne pas avec Gradle5
Utilisez SDKMAN! Avec Git Bash
Utilisez plusieurs bases de données avec Rails 6.0
Utiliser Spring JDBC avec Spring Boot
Utilisez Ruby avec Google Colab
Utiliser SpatiaLite avec Java / JDBC
Hello World avec SpringBoot / Gradle
[Docker] À utiliser à tout moment avec Docker + Rails
Utiliser PlantUML avec Visual Studio Code
Utiliser l'authentification de base avec Spring Boot
Construire un projet Java avec Gradle
Utiliser java avec MSYS et Cygwin
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Gradle
Utiliser Microsoft Graph avec Java standard
Utiliser le type inet PostgreSQL avec DbUnit
J'ai essayé d'utiliser JOOQ avec Gradle
Utilisez bootstrap 4 avec PlayFramework 2.6 (pas de CDN)
Couverture de test de sortie avec Clover + Gradle
Je ne peux pas installer lombok avec Gradle.
Utiliser Git avec SourceTree et Eclipse
Utiliser Azure Bing SpellCheck avec Java
Utilisez JDBC avec Java et Scala.
Utiliser DataDog APM avec des frameworks non pris en charge
Utiliser Java 11 avec Google Cloud Functions
Comment utiliser mssql-tools avec Alpine
À partir de Spring Boot 0. Utilisez Spring CLI
Utilisation de cuda11.0 avec pytorch en utilisant Docker
Développer le traitement avec IntelliJ + Kotlin + Gradle
[Java] Créer un module exécutable avec Gradle
Comment utiliser BootStrap avec Play Framework
Utilisez Firebase Realtime Database avec Cocos Creator.
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Application Java CICS-Run - (3) Gestion de build avec Gradle
Utiliser le lien symbolique avec la construction en plusieurs étapes de Docker
Utilisez FacesContext comme maquette avec PowerMockito
[JaCoCo (Java Code Coverage)] Utilisation avec NetBeans