Gradleを使用して依存関係ツリーを検索する


542

Gradleを使用して、何に依存するかというツリーを作成することは可能ですか?

私にはプロジェクトがあり、すべての依存関係を見つけたいので、前方宣言などで少し整理できるようにしたいと思います。



@OliverCharlesworthは、閉じるボタンを使用して回答を重複としてマークしてください
030

1
@ user3286701多分あなたは答えの1つを受け入れることができますか?
030

5
gradle dependenciesうまくいくはずです。みんながgradlew app:dependenciesAndroidを持っているからだと思う。
prayagupd

2
@prayagupdこれが答えになるはずです。問題はgradleについてです。ランクの高い回答を読んだ後、ターミナルを開き、gradleを使用する一般的なプロジェクトのディレクトリにcdしました。「gradle app:dependencies」を実行して、何もビルドする予定はありませんでしたが、「Build failed」エラーが発生しました。私のプロジェクトは正常にビルドされ、依存関係を確認したかっただけです。
ka3ak

回答:


604

Androidの場合、この行を使用します

 gradle app:dependencies

またはgradleラッパーがある場合:

./gradlew app:dependencies

appプロジェクトモジュールはどこにありますか。

また、あなたは何かがあるかどうかを確認したい場合はcompiletestCompileandroidTestCompileでそれを引っ張っているものと同様の依存関係:

./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>

10
ああ、そこにモジュール名を入れなければなりませんでした。だからこそ…ありがとう!
Jenix

ちょうど今gradleを勉強し始めたので、少し混乱しました。gradlewをgradlewとして扱うことはできますか?つまり、gradle's with gradlewと同じオプション/コマンドを入力できますか?
Jenix

1
@Jenixはい、ラッパーを使用./gradlewしている場合は、代わりに使用しますgradle
Chad Bingham

2
Project 'app' not found in root projectこれらのコマンドを実行するとエラーが発生します。しかしベンジャミンの解決策はうまくいった。
krock 2018年

5
実際./gradlew :dependenciesに動作します。すべてのプロジェクトの依存関係がリストされますが、適切なものを見つけるのは簡単です。
dirkjot

240

コマンドを使用して、依存関係ツリーをレンダリングできますgradle dependencies。詳細については、オンラインユーザーガイドのセクション11.6.4プロジェクトの依存関係の一覧表示を確認してください。


2
Androidプロジェクトでこれを行うと、次の出力しか得られません。pastebin.com / fHFigAuY提案?
Nilzor

3
@Nilzorおそらく間違ったディレクトリ(build.gradleファイルを含まない)でコマンドを実行しているか、ビルドファイルがプラグインを適用していません。
Benjamin Muschko

6
gradle


3
ラッパーを使用する場合:./gradlew dependencies
ScrappyDev

152

のコンソール出力をナビゲートするのが難しいgradle dependencies場合は、プロジェクトレポートプラグインを追加できます

apply plugin: 'project-report'

そして、以下を使用してHTMLレポートを生成します。

$ ./gradlew htmlDependencyReport

レポートは通常、次の場所にあります build/reports/project/dependencies/index.html

次のようになります。 ここに画像の説明を入力してください


2
私にとってそれはただgradle htmlDependencyReport
リチャード・ティングル

2
これはマルチモジュールプロジェクトでは機能しません。空のリストを見るだけです。
アダムArold

1
素晴らしい発見。プラグインは実際にはもっと多くのdocs.gradle.org/current/userguide/project_report_plugin.html
ruX

78

Android Studio(少なくともv2.3.3以降)では、UIから直接コマンドを実行できます。

クリックしてGradleのタブを、次にダブルクリックで:yourmodule - >タスク- >アンドロイド- > androidDependencies

ツリーはGradle Consoleタブに表示されます

画像は千の言葉の価値があります


1
「gradle projects」ビューを取得するにはどうすればよいですか?
user3526 2017

1
@ user3526画面の右側にある「gradle」タグをクリックします。参照用に添付の画像を参照してください
ニコラス・カラスコ

2
これにより、ツリーではなくAS 3.2.0でフラットリストが作成されることがわかりました。ただし、コマンドラインバリアントはツリーを作成します。
トム

5
@Tomは 'android'ではなく 'help'カテゴリで 'depencies'タスクを実行します。ツリーとして表示
Maxim Berezovsky

27

多くの場合、完全なtestcompileと、androidTestCompile依存関係グラフは、一緒に検討することが多すぎます。単にcompile依存関係グラフが必要な場合は、次のように使用できます。

./gradlew app:dependencies --configuration compile

出典:Gradle docsセクション4.7.6

注:compileは、Gradleの最新バージョンでは非推奨となっており、最新バージョンでは、すべてのcompile依存関係をに移行することをお勧めしますimplementationこちらの回答をご覧ください


4
ただのメモ:コンパイルは非推奨になりました。人々は実装に移行する必要があります
reinaldomoreira

25

依存関係をグラフで視覚化したい場合は、gradle-dependency-graph-generatorプラグインを使用できます。

通常、このプラグインの出力はbuild / reports / dependency-graphディレクトリにあり、プラグインのバージョン0.5.0を使用している場合は3つのファイル(.dot | .png | .svg)が含まれています。

実際のアプリ(チェスクロック)の依存関係グラフの例:

グラフ


ちょっとデビッド、私はプラグインの指示で言われたようにやった。プロジェクトグラドルにプラグインを適用しましたが、ビルドディレクトリにレポートフォルダーがありません。プロジェクトをビルドして実行する以外に必要なことはありますか?
Rushi M Thakker

このプラグインは、依存関係のバージョンと競合を表示しません。Mavenの場合はこのようになります。github.com/janssk1/maven-graph-plugin/wiki/Manualこれにより役に立たなくなります
。– sytolk

18

Androidの場合、これをターミナルに入力します

gradlew app:dependencies

次のようにアップグレードするために、すべての依存関係と新しいバージョンの依存関係が一覧表示されます

com.android.support:customtabs:26.1.0 -> 27.1.1 (*)

15

Gradleでは状況が進んでいるため、この質問には別の答えが必要だと思います。
Gradle 4.3以降、「ビルドスキャン」が導入されました。すべての関連情報は、Gradleのドキュメント(利用可能である12)。私にとって、これは、依存関係(および一般的にはビルド)を明確に整理された方法で確認する最も簡単な方法のようです。

作成は非常に簡単で、実行するだけです。

gradle build --scan  

(または./gradlew build --scanラッパーを使用する場合)

これにより、スキャンを確認できるランダムに生成されたリンクが生成されます。そのリンクを開くとき、あなたはあなたの電子メールを入力して、リンクの完全な制御を得ます。共有または削除してください。それは持っているビルドに関する情報の多くは、だけでなく、依存関係を。依存関係、それらの階層、それらを取得するために使用されたリポジトリだけでなく、ビルドに関する他の多くの要素、つまり、そのパフォーマンス(大きな複雑なビルドに関心がある)、テスト、コンソール出力、さらにはJDKとJVMが使用されたシステム構成、最大ヒープサイズなど

これはモックプロジェクトの印刷画面です。

ビルドスキャンの例

ビルドスキャンは、何が起こったのか、なぜ起こったのかについての洞察を提供するビルドの共有可能な記録です。scans.gradle.comでビルドスキャンを無料で作成できます。

ただし、ビルドプロセスの情報はGradleサーバーに送信されることに注意してください。検査が終了したら、完全に削除できます。

最後に、ビルドスキャンを4.3より前のGradleバージョンでも使用できます。ビルドスクリプトに手動でスキャンプラグインを追加する必要があります。

編集
コメントからのフィードバックを組み込むいくつかの追加のメモ:
1)誤って、またはビルドの一部の情報がオンラインになることを理解せずにこれを行うのは非常に困難です(プライベートで、削除する機能はありますが、まだオンラインです) )。

実行するとgradle build --scan、次のメッセージが表示されます。

Publishing a build scan to scans.gradle.com requires accepting the Gradle
Terms of Service defined at https://gradle.com/terms-of-service. Do you
accept these terms? [yes, no]

明示的に書き込む必要がyesあり、その後メッセージが続きます。

Publishing build scan...  
https://gradle.com/s/a12en0dasdu

2)Gradle Enterpriseでは、独自のサーバーでGradleビルドスキャンをホストできます。しかし、私はこれについての経験がなく、私が提案するアプローチは、ビルドスキャンにGradleのサーバーを使用する標準のGradleディストリビューションに関するものでした。

3)Gradle自体は、ビルドスキャンを、ビルドの問題のほとんどに対処する方法として促進します。


11
回答に反対票を投じて申し訳ありませんが、IMOは質問に回答していませんgradle build --scan。また、ビルドの詳細をインターネット上のどこかに公開し、削除するには、作業用の電子メールアドレスに関連付ける必要があるという明確な警告ではありません 。
ミハル

1
ちょっとミハル、そのように感じるなら、あなたは反対投票するのを歓迎します。しかし、私は尋ねなければならない、あなたはそれを試しましたか?gradle build --scancmdで実行する と、次のプロンプトが表示されますPublishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no]。手動で書く必要がありますyes。その直後に、次のメッセージが表示されます Publishing build scan... https://gradle.com/s/a12en0dasdu(同じタイプのリンクをランダムに配置)。そのため、以前は適切に警告していると思います。(1/2)
tryman

1
あなたはリンクにアクセスして、電子メールや何もせずにすぐにスキャンを削除することができます。答えとして、それは質問に答えると思います。実際、他のアプローチと比較して、依存関係に関する追加情報が表示されます(さらに、ビルド全体の追加情報も表示されます)。それがあなたの好みに合わない場合、それは完全に大丈夫ですが、それは(私の知る限りでは)仕事にとって現在最も包括的なツールなので、それを念頭に置くことは価値があります。最後に、それはGradle自体によって宣伝され、文字通り彼らの最初のガイド(2/2)です
tryman

@Michal申し訳ありませんが、前にタグを付けるのを忘れたので、私のコメントを見たことがないかもしれません。(私もあなたに答えたコメントを組み込むために投稿を編集しました。)
tryman

2
私はそれを試していません-条件の受け入れについて明確にしてくれてありがとう。-1を削除しました。
ミハル

9

Android Studio内

1)ターミナルを開き、プロジェクトのルートフォルダーにいることを確認します。

2)実行します./gradlew app:dependencies (gradleラッパーを使用していない場合は、を試してください gradle app:dependencies

実行して./gradle dependenciesもプロジェクトのルートフォルダの依存関係ツリーしか表示されないことに注意してください。したがって、上記の方法でアプリに言及すること、つまり ./gradlew app:dependencies重要です。


1
私にとっては、「./」なしで機能しました:gradlew app:dependencies
Gilad Levinson、

7

私もこれを実行するのに便利だとわかりました:

./gradlew dI --dependency <your library>

これは、依存関係がどのように解決されるかを示し(dependencyInsight)、ライブラリを強制または除外する必要がある場所をデバッグするのに役立ちますbuild.gradle

参照:https : //docs.gradle.org/current/userguide/tutorial_gradle_command_line.html


私はあなたが言うようにこれを試して、それのやった仕事ではない:( stackoverflow.com/questions/49646103/...
ロキ

7

./gradlew <module_directory>:<module_name>:dependenciesモジュールがbuild.gradleに到達する前に追加のディレクトリがある場合などに、必要な場合があることに注意してください。疑問がある場合は./gradlew tasks --all、名前を確認してください。


7

私にとっては、それはただ一つのコマンドでした

build.gradleに追加 plugin

apply plugin: 'project-report'

次に、cmdに移動し、次のコマンドを実行します

./gradlew htmlDependencyReport

これは私にHTMLレポートWOW Htmlレポートを与えます💕

それはすべての私の主です。


これはすでにDevstrによって回答されています。
brute_force

はい、ありがとうございました。@ brute_force当時、私には見えませんでした。何が欲しい、私の答えを削除しますか?
Dupinder Singh

1

Gradleの最近のバージョン(6.4.1バージョンでテストしました):

gradle dependencies --configuration compileClasspath

または、Gradle Wrapperを使用している場合:

gradlew dependencies --configuration compileClasspath

0

最後に2つのステップですべての依存関係を単一のファイルにしたい場合。これをbuild.gradle.ktsプロジェクトのルートに追加します。

project.rootProject.allprojects {
    apply(plugin="project-report")

    this.task("allDependencies", DependencyReportTask::class) {
        evaluationDependsOnChildren()
        this.setRenderer(AsciiDependencyReportRenderer())
    }

}

次に適用します。

./gradlew allDependencies | grep '\-\-\-' | grep -Po '\w+.*$' | awk -F ' ' '{ print $1 }' | sort | grep -v '\{' | grep -v '\[' | uniq | grep '.\+:.\+:.\+'

これにより、プロジェクトおよびサブプロジェクトのすべての依存関係と、すべてのサードパーティの依存関係が提供されます。

これをプログラムで実行したい場合は、依存関係のカスタムレンダラーが必要になりAsciiDependencyReportRendererます。デフォルトでは、依存関係のASCIIグラフを出力するを拡張することから始めることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.