web-dev-qa-db-fra.com

Comment trouver \ enlever les dépendances inutilisées dans gradle

Je voulais trouver des dépendances inutilisées dans mon projet. Y a-t-il une fonctionnalité pour cela dans Gradle comme dans Maven?

101

MISE À JOUR: 28-06-2016: Android support de la dépendance non utilisée

En juin 2017 , ils ont publié le 4.0.0 version et nom du projet racine renommé "gradle-lint-plugin" à "nebula-lint-plugin". Ils ont également ajouté la prise en charge d'Android à la dépendance non utilisée .


En Mai 2016 Gradle a mis en œuvre plugin Gradle Lint pour rechercher et supprimer les dépendances indésirables.

Gradle Lint Plugin: Documentation complète

Le plug-in Gradle Lint est un outil linter configurable et plug-in permettant d'identifier et de générer des rapports sur les tendances en matière de mauvaise utilisation ou de dépréciation des scripts Gradle et des fichiers associés.

Ce plugin a différentes règles. règle de dépendance non utilisée est l'un d'entre eux. Il a 3 caractéristiques spécifiques.

  1. Supprime les dépendances inutilisées.
  2. Favorise les dépendances transitives utilisées directement par votre code en dépendances explicites de premier ordre.
  3. Déplace les dépendances vers la configuration "correcte".

Pour appliquer la règle, ajoutez:

gradleLint.rules += 'unused-dependency'

Les détails de règle de dépendance non utilisée sont donnés dans la dernière partie.

Pour appliquer le plugin Gradle Lint:

buildscript { repositories { jcenter() } }
plugins {
  id 'nebula.lint' version '0.30.2'
}

Sinon:

buildscript {
  repositories { jcenter() }
  dependencies {
    classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
  }
}

apply plugin: 'nebula.lint'

Définissez les règles contre lesquelles vous souhaitez agir:

gradleLint.rules = ['all-dependency'] // add as many rules here as you'd like

Pour une version d'entreprise, nous vous recommandons de définir les règles de lint dans un script init.gradle ou dans un script de dégradé inclus via le mécanisme apply de Gradle.

Pour les projets multimodules, nous vous recommandons d’appliquer le plugin dans un bloc allprojects:

allprojects {
  apply plugin: 'nebula.lint'
  gradleLint.rules = ['all-dependency'] // add as many rules here as you'd like
}


Les détails de règle de dépendance non utilisée sont donnés dans cette partie

Pour appliquer la règle, ajoutez:

gradleLint.rules += 'unused-dependency'

La règle inspecte les fichiers binaires compilés émanant de jeux de sources de votre projet et recherchant des références de classe. Elle fait correspondre ces références aux dépendances que vous avez déclarées dans votre bloc dépendances .

Plus précisément, la règle apporte les ajustements suivants aux dépendances:

1) Supprime les dépendances inutilisées

  • Les pots de style familial tels que com.amazonaws: aws-Java-sdk sont supprimés car ils ne contiennent pas de code.

2) Promeut les dépendances transitives utilisées directement par votre code en dépendances de premier ordre explicites

  • Cela a pour effet secondaire de scinder les bocaux de type familial, tels que com.amazonaws: aws-Java-sdk, dans les parties que vous utilisez réellement et de les ajouter en tant que dépendances de premier ordre.

3) Déplace les dépendances vers la configuration "correcte"

  • Les Webjars sont déplacés vers la configuration d'exécution
  • Les fichiers JAR qui ne contiennent aucune classe ET le contenu en dehors de META-INF sont déplacés vers l'exécution
  • 'xerces', 'xercesImpl', 'xml-apis' doivent toujours être étendus à l'exécution
  • Les fournisseurs de services (les fichiers JAR contenant META-INF/services) tels que mysql-connector-Java sont déplacés vers l'exécution s'il n'y a pas de référence prouvable au moment de la compilation
  • Les dépendances sont déplacées vers la configuration de jeu source la plus élevée possible. Par exemple, "junit" est déplacé vers testCompile sauf s'il existe une dépendance explicite à ce sujet dans l'ensemble de sources principal (rare).


MISE À JOUR: plugins précédents

Pour votre gentille information, je veux partager sur les plugins précédents

  1. Gradle plugin qui trouve les dépendances inutilisées, déclarées et transitives est com.github.nullstress.dependency-analysis

Mais , sa dernière version 1.0.3 a été créée le 23 décembre 2014 . Après cela, il n'y a pas de mise à jour.

N.B: Beaucoup de nos ingénieurs sont confus à propos de ce plugin car ils n'ont mis à jour que le numéro de version et rien d'autre.

61
SkyWalker

J'ai eu beaucoup de chance avec le Gradle Dependency Analysis Plugin . Pour commencer, ajoutez les deux éléments suivants à votre script de génération Gradle.

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
    }
}

et

apply plugin: "dependencyAnalysis"

Une fois ceux-ci en place, lancez gradle analyze. S'il existe des dépendances inutilisées, vous obtiendrez un échec de la construction affichant une sortie similaire au texte ci-dessous, ainsi qu'une liste des dépendances inutilisées (déclarées et transitives). L'échec de la construction est vraiment pratique si vous voulez imposer l'absence de dépendances inutilisées via une génération d'EC.

:foo:analyze FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':foo:analyze'.
> The project has unused declared artifacts
7
jstricker

Le projet mentionné dans les réponses précédentes semble être mort. J'utilise gradle-dependency-analysis . La configuration est simple:

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3'
  }
}

apply plugin: 'ca.cutterslade.analyze'

Alors fais:

$ gradle analyzeDependencies
7
Subhash Chandran

Note de la rédaction: cette réponse est obsolète, veuillez vous reporter à la réponse du haut.

Vous pouvez essayer com.github.nullstress.dependency-analysis plugin gragle

Créez un extrait de script à utiliser dans toutes les versions de Gradle:

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
  }
}

apply plugin: "com.github.nullstress.dependency-analysis"

Créez un extrait de script pour le nouveau mécanisme de plug-in en incubation introduit dans Gradle 2.1:

plugins {
  id "com.github.nullstress.dependency-analysis" version "1.0.3"
}

En outre, il existe un fil ( Existe-t-il un équivalent Gradle de "dépendance mvn: analyser"? ) dans le forum Gradle à ce sujet.

1
EFernandes

Les projets sur la plupart des réponses historiques sont morts, mais gradle-dependency-analysis semble être en vie au moment de l'écriture de cet article (le dernier commit remonte à deux jours auparavant).

1
Brandon McKenzie