Gradleで未使用の依存関係を見つける/削除する方法 質問する

Gradleで未使用の依存関係を見つける/削除する方法 質問する

プロジェクト内の未使用の依存関係を見つけたいのですが、Maven のように Gradle にこの機能はありますか?

ベストアンサー1

2024年5月更新: プラグインはメンテナンスされなくなりました。作者は依存関係分析Gradleプラグインkts ベースのプロジェクトを含む、Java、Kotlin、Android プロジェクトをサポートします。

Kotlin ユーザー向けの更新: 2021 年 12 月 17 日: Kotlin プロジェクト内の不足または余分なビルド依存関係を検出します: バージョン 1.0.9 (最新)

Kotlin ユーザー向けに 2 種類の設定を追加しました。

  • プラグインDSLの使用
  • レガシープラグインアプリケーションの使用

プラグイン DSL の使用:

plugins {
  id("com.faire.gradle.analyze") version "1.0.9"
}

レガシープラグインアプリケーションの使用:

buildscript {
  repositories {
    maven {
      url = uri("https://plugins.gradle.org/m2/")
    }
  }
  dependencies {
    classpath("com.faire.gradle:gradle-kotlin-buildozer:1.0.9")
  }
}

apply(plugin = "com.faire.gradle.analyze")

リソースリンク:

  1. https://plugins.gradle.org/plugin/com.faire.gradle.analyze
  2. https://github.com/Faire/gradle-kotlin-buildozer
  3. https://discuss.gradle.org/t/detecting-unused-projects-dependencies/25522

更新: 2016年6月28日: unused-dependency の Android サポート

2017年6月をリリースし4.0.0 version、ルートプロジェクト名"gradle-lint-plugin"を に変更しました"nebula-lint-plugin"。また、未使用依存関係に対する Android サポート


2016年5月Gradleは、Gradle lint プラグイン不要な依存関係を見つけて削除する

Gradle Lint プラグイン: 完全なドキュメント

Gradle Lint プラグインは、Gradle スクリプトおよび関連ファイル内の誤用や非推奨のパターンを識別して報告するための、プラグイン可能で構成可能なリンター ツールです。

このプラグインにはさまざまなルールがあります。未使用の依存関係ルールもその1つです。3つの特徴があります。

  1. 未使用の依存関係を削除します。
  2. コードによって直接使用される推移的な依存関係を明示的な第一階層の依存関係に昇格します。
  3. 依存関係を「正しい」構成に再配置します。

ルールを適用するには、以下を追加します。

gradleLint.rules += 'unused-dependency'

の詳細未使用の依存関係ルール最後の部分に記載されています。

Gradle lint プラグインを適用するには:

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

あるいは:

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

apply plugin: 'nebula.lint'

リンティングするルールを定義します。

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

エンタープライズ ビルドの場合、init.gradle スクリプトまたは Gradle apply from メカニズムを介して組み込まれる Gradle スクリプトで lint ルールを定義することをお勧めします。

マルチモジュール プロジェクトの場合、プラグインをallprojectsブロックで適用することをお勧めします。

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


の詳細未使用の依存関係ルールこの部分に記載されている

ルールを適用するには、以下を追加します。

gradleLint.rules += 'unused-dependency'

このルールは、プロジェクトのソースセットクラス参照を探し、それらの参照を、依存関係ブロック。

具体的には、このルールは依存関係に対して次の調整を行います。

1. 未使用の依存関係を削除する

  • com.amazonaws:aws-java-sdk のようなファミリースタイルの jar は、コードが含まれていないため削除されます。

2. コードで直接使用される推移的な依存関係を明示的な第一階依存関係に昇格します。

  • これには、com.amazonaws:aws-java-sdkのようなファミリースタイルのJARファイルを実際に使用している部分に分割し、それらを第一の依存関係として追加するという副作用があります。

3. 依存関係を「正しい」構成に再配置する

  • Webjarはランタイム構成に移動されました
  • クラスを含まない JAR ファイルそしてMETA-INF外のコンテンツはランタイムに移動されます
  • 'xerces'、'xercesImpl'、'xml-apis' は常にランタイムスコープにする必要があります
  • mysql-connector-javaのようなサービスプロバイダ(META-INF/servicesを含むJARファイル)は、証明可能なコンパイル時の参照がない場合、ランタイムに移動されます。
  • 依存関係は、可能な限り最高のソース セット構成に移動されます。たとえば、メイン ソース セットに明示的な依存関係がない限り (まれ)、'junit' は testCompile に再配置されます。


更新: 以前のプラグイン

ご参考までに、以前のプラグインについて共有したいと思います

  1. 未使用の依存関係、宣言済み依存関係、推移的依存関係を見つけるGradleプラグインはcom.github.nullstress.依存関係分析

しかし最新バージョン1.0.3は2014年12月23日に作成されました。それ以降は更新はありません。

注: 多くのエンジニアが混乱していますこのプラグインバージョン番号のみが更新され、それ以外は何も更新されなかったためです。

おすすめ記事