Comment trouver \ supprimer 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, comme dans maven?

MISE À JOUR: 28-06-2016: support Android à la dépendance inutilisée

En juin 2017 , ils ont sorti la 4.0.0 version et ont renommé le nom du projet racine "gradle-lint-plugin" en "nebula-lint-plugin" . Ils ont également ajouté le support Android à la dépendance inutilisée .


En mai 2016, Gradle a mis en place un plug-in pour détecter et supprimer les dépendances indésirables.

Gradle Lint Plugin: Documentation complète

Le plugin Gradle Lint est un outil de linter configurable et enfichable pour identifier et signaler les modèles de mauvaise utilisation ou de dépréciations dans les scripts Gradle et les fichiers associés.

Ce plugin a plusieurs règles. La règle de dépendance non utilisée en fait partie. 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 pour expliciter les dépendances de premier ordre.
  3. Reloge les dépendances à la configuration «correcte».

Pour appliquer la règle, ajoutez:

 gradleLint.rules += 'unused-dependency' 

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

Pour appliquer le plugin de peluches:

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

Alternativement:

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

Définissez les règles que vous souhaitez utiliser contre:

 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 charpente dans un script init.gradle ou dans un script de dégradé inclus via le mécanisme Gradle Apply.

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 la 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 binarys compilés provenant des jeux de sources de votre projet à la recherche de références de classe, et fait correspondre ces références aux dépendances que vous avez déclarées dans votre bloc de dépendances .

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

1) Supprime les dépendances inutilisées

  • Jars de style familial comme com.amazonaws: aws-java-sdk sont supprimés, car ils ne contiennent pas de code

2) Favorise les dépendances transitives utilisées directement par votre code pour expliciter les dépendances de premier ordre

  • Cela a pour effet secondaire de casser les fichiers de style familial comme com.amazonaws: aws-java-sdk dans les parties que vous utilisez réellement, et d’append celles-ci en tant que dépendances de premier ordre.

3) Reloge les dépendances à la configuration «correcte»

  • Les webjars sont déplacés vers la configuration d’exécution
  • Les fichiers JAR qui ne contiennent pas de classes ET le contenu en dehors de META-INF sont déplacés vers l’exécution
  • ‘xerces’, ‘xercesImpl’, ‘xml-apis’ doivent toujours être à scope de main
  • Les fournisseurs de services (bocaux contenant META-INF / services) comme mysql-connector-java sont déplacés à l’exécution s’il n’y a pas de référence à la compilation
  • Les dépendances sont déplacées vers la configuration de jeu de sources la plus élevée possible. Par exemple, ‘junit’ est relocalisé sur testComstack sauf s’il existe une dépendance explicite dans le jeu de sources principal (rare).


MISE À JOUR: plugins précédents

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

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

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

NB: Beaucoup de nos ingénieurs sont confus à propos de ce plugin car ils n’ont mis à jour que le numéro de version.

J’ai eu beaucoup de chance en utilisant le plug-in d’parsing de dépendance Gradle . Pour commencer, ajoutez les deux éléments suivants à votre script de compilation 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 que ceux-ci sont en place, effectuez gradle analyze . S’il existe des dépendances inutilisées, vous obtenez un échec de génération qui affiche un résultat 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 qu’il n’y ait pas de dépendances inutilisées via une génération de CI.

 :foo:analyze FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':foo:analyze'. > The project has unused declared artifacts 

Le projet mentionné dans les réponses précédentes semble être mort. J’utilise l’ parsing des dépendances graduelles . L’installation 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 

Les projets sur la plupart des réponses historiques sont morts, mais l’ parsing des dépendances graduelles semble être vivante au moment d’écrire ces lignes (le dernier engagement date d’il y a deux jours).

Ce n’est pas une fonctionnalité intégrée, et je ne connais pas de plug-in tiers (mais il y en a peut-être un).

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

Créer 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éer un extrait de script pour un nouveau mécanisme d’incubation introduit dans Gradle 2.1:

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

Il y a aussi un fil ( Y a-t-il un équivalent Gradle de “mvn dependency: analysis”? ) Dans le forum gradle à ce sujet.