gradle을 사용하여 의존성 트리 찾기


542

gradle을 사용하여 무엇에 의존하는 나무를 만들 수 있습니까?

나는 프로젝트를 가지고 있으며 모든 의존성을 찾고 싶습니다. 따라서 앞으로 선언 등으로 조금 정리 할 수 ​​있습니다.



@OliverCharlesworth 닫기 버튼을 사용하여 답변을 중복으로 표시하십시오
030

1
@ user3286701 아마도 대답 중 하나를 수락 할 수 있습니까?
030

5
gradle dependencies작동해야합니다. gradlew app:dependencies안드로이드 때문에 아마 모든 사람이 가진 방식에 미친 것입니다.
prayagupd

2
@prayagupd 이것이 답이되어야합니다. 문제는 gradle에 관한 것입니다. 높은 순위의 답변을 읽은 후 터미널을 열고 gradle을 사용하는 일반 프로젝트의 디렉토리로 cd했습니다. 'gradle app : dependencies'를 실행했지만 아무것도 만들 계획이 없지만 '빌드 실패'오류가 발생했습니다. 내 프로젝트는 잘 작성되었고 종속성을보고 싶었습니다.
ka3ak

답변:


604

Android의 경우이 줄을 사용하십시오.

 gradle app:dependencies

또는 gradle wrapper가있는 경우 :

./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를 gradle로 취급 할 수 있습니까? gradle의 gradle과 동일한 옵션 / 명령을 입력 할 수 있습니까?
Jenix

1
당신이 래퍼를 사용하는 경우 네 @Jenix, 단지 사용하는 ./gradlew대신에gradle
차드 빙햄

2
Project 'app' not found in root project이 명령을 실행할 때 오류가 발생 합니다. 그러나 Benjamins 솔루션 은 효과가있었습니다.
krock

5
실제로 ./gradlew :dependencies작동합니다. 모든 프로젝트의 종속성을 나열하지만 올바른 프로젝트를 쉽게 찾을 수 있습니다.
dirkjot

240

명령을 사용하여 종속성 트리를 렌더링 할 수 있습니다 gradle dependencies. 자세한 정보 는 온라인 사용자 안내서에서 11.6.4 프로젝트 종속성 나열 섹션을 확인하십시오 .


2
내 안드로이드 프로젝트 에서이 작업을 수행 할 때 pastebin.com/fHFigAuY 제안입니까?
Nilzor

3
@Nilzor build.gradle파일 이없는 잘못된 디렉토리에서 명령을 실행 중이거나 빌드 파일에 플러그인이 적용되지 않은 것 같습니다.
Benjamin Muschko 2016 년

6
종속 관계 : 프로젝트 : 당신은 Gradle을 사용하여 특정 프로젝트에 대한 종속성을 얻을 수 있습니다
mbonnin

2
Android Studio 플러그인- 종속성을 분석하기위한 Gradle View
Jignesh Patel

3
래퍼를 사용하는 경우 :./gradlew dependencies
ScrappyDev

152

의 콘솔 출력을 탐색하기 어려운 경우 프로젝트 보고서 플러그인을gradle dependencies 추가 할 수 있습니다 .

apply plugin: 'project-report'

다음을 사용하여 HTML 보고서를 생성하십시오.

$ ./gradlew htmlDependencyReport

보고서는 일반적으로 build/reports/project/dependencies/index.html

다음과 같이 보입니다 : 여기에 이미지 설명을 입력하십시오


2
나를 위해 그것은 단지gradle htmlDependencyReport
Richard Tingle

2
다중 모듈 프로젝트에서는 작동하지 않습니다. 방금 목록을보고 비 웁니다.
Adam Arold

1
좋은 발견. 플러그인은 실제로 더 많은 docs.gradle.org/current/userguide/project_report_plugin.html을 수행합니다
ruX

78

Android Studio (최소 v2.3.3 이후)에서는 UI에서 직접 명령을 실행할 수 있습니다.

온 클릭 Gradle을 탭을 클릭 한 다음 두 번 클릭하여 : yourmodule -> 작업 -> 안드로이드 -> androidDependencies

Gradle 콘솔 탭 에 트리가 표시됩니다

이미지는 천 단어의 가치가 있습니다


1
"gradle 프로젝트"보기를 어떻게 얻습니까?
user3526

1
@ user3526 화면 오른쪽에있는 "gradle"태그를 클릭하십시오. 참조를 위해 첨부 된 이미지 봐
니콜라스 카라 스코에게

2
이것이 트리 대신 AS 3.2.0에서 단순 목록을 작성한다는 것을 알았습니다. 그러나 명령 행 변형은 트리를 만듭니다.
Tom

5
@Tom은 'android'가 아닌 'help'카테고리에서 'depencies'작업을 실행합니다. 나무로 표시
Maxim Berezovsky

27

종종 완전한 test, compileandroidTestCompile의존성 그래프가 너무 커서 함께 검토하기가 어렵습니다. 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)이 포함됩니다 .

실제 앱의 의존성 그래프 예 ( Chess Clock ) :

그래프


데이비드, 나는 플러그인 지침에 나와있는대로했다. 프로젝트 gradle에 플러그인을 적용했지만 빌드 디렉토리에 보고서 폴더가 표시되지 않습니다. 프로젝트를 빌드하고 실행하는 것 외에해야 할 일이 있습니까?
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 문서 ( 1 , 2 )에 있습니다. 나에게 이것은 현재 명확하고 체계적인 방법으로 종속성 (및 일반적으로 빌드)을 확인하는 가장 쉬운 방법 인 것 같습니다.

그들은 만들기가 매우 쉽고 그냥 실행하십시오.

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인터넷 어딘가에 빌드 세부 정보를 게시하고 삭제하려면 작동하는 전자 메일 주소와 연결해야 한다는 경고가 명확하지 않습니다 .
Michal

1
이봐, Michal, 당신은 그렇게 느끼면 downvote에 오신 것을 환영합니다. 하지만 물어봐야합니까, 시도 했습니까? 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을 제거했습니다.
Michal

9

안드로이드 스튜디오에서

1) 터미널을 열고 프로젝트의 루트 폴더에 있는지 확인하십시오.

2) 실행 ./gradlew app:dependencies (그라들 래퍼를 사용하지 않는 경우 시도하십시오 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/…
loki

7

./gradlew <module_directory>:<module_name>:dependenciesbuild.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

두 단계 내에서 마지막에 단일 파일의 모든 종속성을 원할 경우. 이것을 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.