Ich wollte unbenutzte Abhängigkeiten in meinem Projekt finden. Gibt es dafür in Gradle eine Funktion wie in Maven?
Ich wollte unbenutzte Abhängigkeiten in meinem Projekt finden. Gibt es dafür in Gradle eine Funktion wie in Maven?
Antworten:
Im Juni 2017 haben sie das veröffentlicht
4.0.0 version
und den Namen des Stammprojekts"gradle-lint-plugin"
in umbenannt"nebula-lint-plugin"
. Sie haben auch Android-Unterstützung für nicht verwendete Abhängigkeiten hinzugefügt .
Im Mai 2016 hat Gradle das Gradle-Flusen-Plugin implementiert , um unerwünschte Abhängigkeiten zu finden und zu entfernen
Das Gradle Lint-Plugin ist ein steckbares und konfigurierbares Linter-Tool zum Identifizieren und Melden von Missbrauchs- oder Verfallsmustern in Gradle-Skripten und verwandten Dateien.
Dieses Plugin hat verschiedene Regeln. Die nicht verwendete Abhängigkeitsregel ist eine davon. Es hat drei spezifische Eigenschaften.
Fügen Sie zum Anwenden der Regel Folgendes hinzu:
gradleLint.rules += 'unused-dependency'
Details zur nicht verwendeten Abhängigkeitsregel finden Sie im letzten Teil.
So wenden Sie das Gradle Lint Plugin an:
buildscript { repositories { jcenter() } }
plugins {
id 'nebula.lint' version '0.30.2'
}
Alternative:
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
}
}
apply plugin: 'nebula.lint'
Definieren Sie, gegen welche Regeln Sie fusseln möchten:
gradleLint.rules = ['all-dependency'] // Add as many rules here as you'd like
Für einen Enterprise-Build empfehlen wir, die Flusenregeln in einem init.gradle-Skript oder in einem Gradle-Skript zu definieren, das über den Gradle-Apply-from-Mechanismus enthalten ist.
Für Multimodul-Projekte empfehlen wir, das Plugin in einem allprojects
Block anzuwenden :
allprojects {
apply plugin: 'nebula.lint'
gradleLint.rules = ['all-dependency'] // Add as many rules here as you'd like
}
Fügen Sie zum Anwenden der Regel Folgendes hinzu:
gradleLint.rules += 'unused-dependency'
Die Regel überprüft kompilierte Binärdateien, die aus den Quellensätzen Ihres Projekts stammen, nach Klassenreferenzen und vergleicht diese Referenzen mit den Abhängigkeiten, die Sie in Ihren Abhängigkeiten deklariert haben .
Zu Ihrer Information möchte ich über frühere Plugins berichten
Die neueste Version 1.0.3 wurde jedoch am 23. Dezember 2014 erstellt . Danach gibt es keine Updates mehr.
NB: Viele unserer Ingenieure sind verwirrt über dieses Plugin, da sie nur die Versionsnummer aktualisiert haben, sonst nichts.
implementation
und api
), und noch schlimmer, empfiehlt von den neuen zu den alten veralteten diejenigen zu ändern (zB: compile
, testCompile
, etc.).
Ich hatte viel Glück mit dem Gradle Dependency Analysis Plugin . Fügen Sie Ihrem Gradle-Build-Skript die folgenden zwei Dinge hinzu, um damit zu beginnen.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
}
}
und
apply plugin: "dependencyAnalysis"
Sobald diese vorhanden sind, führen Sie sie aus gradle analyze
. Wenn nicht verwendete Abhängigkeiten vorhanden sind, wird ein Erstellungsfehler angezeigt, der eine Ausgabe ähnlich dem folgenden Text sowie eine Liste der nicht verwendeten Abhängigkeiten (sowohl deklariert als auch transitiv) anzeigt. Der Build-Fehler ist sehr praktisch, wenn Sie erzwingen möchten, dass über einen CI-Build keine nicht verwendeten Abhängigkeiten vorhanden sind.
:foo:analyze FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':foo:analyze'.
> The project has unused declared artifacts
Das in den früheren Antworten erwähnte Projekt scheint tot zu sein. Ich benutze Gradle-Abhängigkeits-Analyse . Die Einrichtung ist einfach:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3'
}
}
apply plugin: 'ca.cutterslade.analyze'
Dann mach:
$ gradle analyzeDependencies
Ich habe gerade davon erfahren: https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis
Wie es aussieht, befindet es sich in der aktiven Entwicklung, aber ich habe es noch nicht getestet.
Bearbeiten: Eigentlich ist es ziemlich genial, es bietet viele Ratschläge (zB ob man API gegen Implementierung verwendet)
Anmerkung des Herausgebers: Diese Antwort ist veraltet. Bitte sehen Sie die Top-Antwort .
Sie können das Gradle-Plugin com.github.nullstress.dependency-analysis ausprobieren
Erstellen Sie ein Skript-Snippet zur Verwendung in allen Gradle-Versionen:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
}
}
apply plugin: "com.github.nullstress.dependency-analysis"
Erstellen Sie ein Skript-Snippet für einen neuen, inkubierenden Plugin-Mechanismus, der in Gradle 2.1 eingeführt wurde:
plugins {
id "com.github.nullstress.dependency-analysis" version "1.0.3"
}
Außerdem gibt es im Gradle-Forum einen Thread ( Gibt es ein Gradle-Äquivalent zu "mvn-Abhängigkeit: analysieren"? ).
Die Projekte zu den meisten historischen Antworten sind tot, aber die Gradle-Abhängigkeitsanalyse scheint ab dem 30.05.2016 noch am Leben zu sein.