Gradle'da kullanılmayan bağımlılıklar nasıl bulunur / kaldırılır


Yanıtlar:


72

GÜNCELLEME: 28-06-2016: Kullanılmayan bağımlılığa Android desteği

In Haziran 2017 , bunlar yayımlandı 4.0.0 version ve kök proje adı değiştirildi "gradle-lint-plugin"için "nebula-lint-plugin". Ayrıca kullanılmayan bağımlılığa Android desteği de eklediler .


In Mayıs 2016 Gradle uygulamıştır Gradle tiftik eklentisi istenmeyen bağımlılık bulma ve çıkarma için

Gradle Lint Eklentisi: Tam Belgeler

Gradle Lint eklentisi, Gradle komut dosyalarında ve ilgili dosyalarda kötüye kullanım veya kullanımdan kaldırma modellerini tanımlamak ve raporlamak için takılabilir ve yapılandırılabilir bir linter aracıdır.

Bu eklentinin çeşitli kuralları vardır. Kullanılmayan Bağımlılık Kuralı bunlardan biridir. Üç spesifik özelliğe sahiptir.

  1. Kullanılmayan bağımlılıkları kaldırır.
  2. Doğrudan kodunuz tarafından birinci dereceden bağımlılıkları belirtmek için kullanılan geçişli bağımlılıkları destekler.
  3. Bağımlılıkları 'doğru' yapılandırmaya yeniden yerleştirir.

Kuralı uygulamak için şunu ekleyin:

gradleLint.rules += 'unused-dependency'

Kullanılmayan Bağımlılık Kuralının detayları son bölümde verilmiştir.

Gradle lint eklentisini uygulamak için:

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

Alternatif:

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

apply plugin: 'nebula.lint'

Hangi kurallara karşı çıkmak istediğinizi tanımlayın:

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

Bir kurumsal yapı için, lint kurallarını bir init.gradle komut dosyasında veya Gradle apply from mekanizmasıyla dahil edilen bir Gradle komut dosyasında tanımlamanızı öneririz.

Çoklu modül projeleri için, eklentiyi bir allprojectsblokta uygulamanızı öneririz :

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


Kullanılmayan Bağımlılık Kuralının detayları bu bölümde verilmiştir.

Kuralı uygulamak için şunu ekleyin:

gradleLint.rules += 'unused-dependency'

Kural, projenizin kaynak kümelerinden çıkan, sınıf referanslarını arayan derlenmiş ikili dosyaları inceler ve bu referansları bağımlılıklar bloğunuzda beyan ettiğiniz bağımlılıklarla eşleştirir .

Kural, özellikle bağımlılıklarda aşağıdaki ayarlamaları yapar:

1. Kullanılmayan bağımlılıkları kaldırır

  • Com.amazonaws gibi aile tarzı kavanozlar: aws-java-sdk, herhangi bir kod içermedikleri için kaldırılır

2. Doğrudan kodunuz tarafından birinci dereceden bağımlılıkları belirtmek için kullanılan geçişli bağımlılıkları destekler

  • Bu, com.amazonaws: aws-java-sdk gibi aile stili JAR dosyalarını gerçekten kullandığınız parçalara ayırmanın ve bunları birinci dereceden bağımlılıklar olarak eklemenin yan etkisine sahiptir.

3. Bağımlılıkları 'doğru' yapılandırmaya yeniden yerleştirir

  • Web kavanozları çalışma zamanı yapılandırmasına taşınır
  • META-INF dışında herhangi bir sınıf ve içerik içermeyen JAR dosyaları çalışma zamanına taşınır
  • "xerces", "xercesImpl", "xml-apis" her zaman çalışma zamanı kapsamında olmalıdır
  • Mysql-connector-java gibi servis sağlayıcılar (META-INF / hizmetleri içeren JAR dosyaları), kanıtlanabilir herhangi bir derleme zamanı referansı yoksa çalışma zamanına taşınır
  • Bağımlılıklar, mümkün olan en yüksek kaynak seti yapılandırmasına taşınır. Örneğin, ana kaynak kümesinde (nadir) açık bir bağımlılık olmadığı sürece, 'junit' testCompile'a taşınır.


GÜNCELLEME: Önceki eklentiler

Nazik bilgileriniz için önceki eklentiler hakkında paylaşmak istiyorum

  1. Kullanılmayan, bildirilen ve geçişli bağımlılıkları bulan Gradle eklentisi com.github.nullstress.dependency-analysis

Ancak en son sürümü 1.0.3 23 Aralık 2014'te oluşturuldu . Bundan sonra herhangi bir güncelleme yok.

Not: Mühendislerimizin çoğu, yalnızca sürüm numarasını güncelledikleri için bu eklenti konusunda kafası karışık .


Gradle-lint-eklentisi Android ile uyumlu mu?
Jaythaking

@Jaythaking evet. Şu bağlantı üzerinden gidebilirsiniz: tools.android.com/tech-docs/new-build-system/… . Umarım sizi açıklığa kavuşturur.
SkyWalker

@Jaythaking - bugün sürüm 4.0.0 ile Android kullanılmayan bağımlılıklar için deneysel destek eklendi
jkschneider

4
Bu eklenti ne yazık ki kotlin dsl ile çalışmıyor. Destekleme planları yok.
snowe

3
Ayrıca yeni gradle yapılandırmaları ile işi değil (örn: implementationve api), ve daha da kötüsü, eski kaldırılmış olanlara yenilerini değişen önerir (örn: compile, testCompilevs.).
Laurence Gonsalves

8

Önceki cevaplarda bahsedilen proje bitmiş gibi görünüyor. Kullandığım gradle-bağımlılık-analiz . Kurulum basittir:

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

apply plugin: 'ca.cutterslade.analyze'

O zaman yap:

$ gradle analyzeDependencies

4
Şu hatayla karşılaşıyorum: 'Gradle senkronizasyonu başarısız oldu:' sınıflar 'adlı görev projede bulunamadı'
Pawan

Bunu yaparken stackOverflowException alıyorum. Buna neyin sebep olduğuna dair kesin bilgi yok. Burada döngüsel bir bağımlılık sorunu olabileceğini düşünüyorum, ancak aracın nerede olduğunu söylemem harika bir fikir olurdu.
SGal

1
@Pawan bu eklenti Android projeleriyle çalışmıyor ve bu yakın zamanda değişmeyecek. Kanıt: github.com/wfhartford/gradle-dependency-analyze/issues/18
diesersamat

8

Gradle Dependency Analysis Plugin'i kullanırken çok şansım oldu . Başlamak için aşağıdaki iki şeyi Gradle oluşturma komut dosyanıza ekleyin.

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

ve

apply plugin: "dependencyAnalysis"

Bunlar yerleştirildikten sonra koşun gradle analyze. Kullanılmayan bağımlılıklar varsa, aşağıdaki metne benzer çıktıyı ve ayrıca kullanılmayan bağımlılıkların bir listesini (hem bildirilen hem de geçişli) gösteren bir yapı hatası alırsınız. Bir CI derlemesi aracılığıyla kullanılmayan bağımlılık olmamasını zorunlu kılmak istiyorsanız derleme hatası gerçekten kullanışlıdır.

:foo:analyze FAILED

FAILURE: Build failed with an exception.

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

3
"Görev için yürütme başarısız oldu ': app: analyse'.> Project'te java eklentisi uygulanmamış." "Eklentiyi uygula:" java "" eklersem, mevcut android uygulama eklentisiyle uyumlu olmadığı söylendi. herhangi bir fikir?
Alex Black

Android uygulama eklentisine özgü bir şey gibi görünüyor. Keşke yardım edebilseydim, ancak Android ile ilgili deneyimim yok!
jstricker

Eklentinin hataları vardır, örneğin bir bağımlılık için statik çağrınız olduğunda, hesaba katılmaz.
ToYonos

bu, linter eklentisi için kullanımdan kaldırılmış gibi görünüyor
Ruthi Ruth


0

Editörün Notu: Bu yanıt güncel değil. Lütfen en üst cevaba bakın .

Com.github.nullstress.dependency-analysis Gradle eklentisini deneyebilirsiniz

Tüm Gradle sürümlerinde kullanmak için komut dosyası snippet'i oluşturun:

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

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

Gradle 2.1'de sunulan yeni, kuluçka, eklenti mekanizması için komut dosyası snippet'i oluşturun:

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

Ayrıca, Gradle forumunda bununla ilgili bir başlık ("mvn bağımlılığı: analiz et" in Gradle eşdeğeri var mı? ).


Bu eklenti ölü bir proje gibi görünüyor ... en azından mevcut Gradle sürümünde.
cjstehno

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.