निर्भरता वृक्ष खोजने के लिए प्रवणता का उपयोग करना


542

क्या यह निर्भर करता है कि एक पेड़ का उत्पादन करने के लिए क्या उपयोग किया जाता है?

मेरे पास एक परियोजना है और सभी निर्भरताओं का पता लगाना चाहूंगा, ताकि मैं इसे आगे की घोषणाओं आदि के साथ थोड़ा-थोड़ा करने में सक्षम हो सकूं।



@OliverCharlesworth कृपया उत्तर को एक डुप्लिकेट के रूप में चिह्नित करने के लिए नज़दीकी बटन का उपयोग करें
030

1
@ user3286701 शायद आप किसी एक उत्तर को स्वीकार कर सकते हैं?
0:30

5
gradle dependenciesकार्य करना चाहिए। इसका दीवाना हर कोई है gradlew app:dependenciesक्योंकि शायद एंड्रॉइड है।
प्रयागपाद

2
@prayagupd यह उत्तर होना चाहिए। सवाल ग्रेडेल के बारे में है। उच्च रैंक वाले उत्तरों को पढ़ने के बाद मैंने टर्मिनल खोला और एक सामान्य परियोजना की निर्देशिका के लिए cd'ed है जो कि ग्रेडेल का उपयोग करता है। मैंने the ग्रेड ऐप: निर्भरता ’को अंजाम दिया और मुझे 'बिल्ड फेल’ त्रुटि मिली, हालांकि मैंने कुछ भी बनाने की योजना नहीं बनाई थी। मेरी परियोजना ठीक है और मैं सिर्फ निर्भरता देखना चाहता था।
ka3ak

जवाबों:


604

Android के लिए, इस लाइन का उपयोग करें

 gradle app:dependencies

या यदि आपके पास एक ढाल आवरण है:

./gradlew app:dependencies

appआपका प्रोजेक्ट मॉड्यूल कहां है

इसके अतिरिक्त, यदि आप जांचना चाहते हैं कि क्या कुछ compileबनाम testCompileबनाम androidTestCompileनिर्भरता के साथ-साथ इसमें क्या खींच रहा है:

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

10
आह, मुझे वहाँ मॉड्यूल नाम रखना था। इसीलिए ... धन्यवाद!
जेनिक्स

बस अब ग्रैडल का अध्ययन शुरू कर दिया है, इसलिए थोड़ा उलझन में है। क्या मैं gradlew को gradle के रूप में व्यवहार कर सकता हूं, मेरा मतलब है कि क्या मैं gradlew के साथ gradle के समान विकल्प / कमांड इनपुट कर सकता हूं?
जेनिक्स

1
@ जेनिक्स हाँ, यदि आप रैपर का उपयोग कर रहे हैं तो इसके ./gradlewस्थान पर उपयोग करेंgradle
चाड बिंगहैम

2
Project 'app' not found in root projectइन कमांड को चलाते समय मुझे त्रुटि मिलती है । हालांकि बेंजामिन समाधान ने काम किया।
मारक

5
वास्तव ./gradlew :dependenciesमें काम करेंगे। यह आपकी सभी परियोजनाओं के लिए निर्भरता को सूचीबद्ध करेगा, लेकिन सही को ढूंढना आसान है।
21

240

आप कमांड के साथ निर्भरता के पेड़ को प्रस्तुत कर सकते हैं gradle dependencies। अधिक जानकारी के लिए ऑनलाइन उपयोगकर्ता गाइड में अनुभाग 11.6.4 लिस्टिंग परियोजना निर्भरता की जाँच करें।


2
जब मैं अपने एंड्रॉइड प्रोजेक्ट के साथ ऐसा करता हूं, तो मुझे केवल यह आउटपुट मिलता है: pastebin.com/fHFigAuY सुझाव?
निलज़ोर

3
@ निलज़ोर आप शायद गलत निर्देशिका में कमांड निष्पादित कर रहे हैं (जिसमें build.gradleफ़ाइल शामिल नहीं है ) या आपकी बिल्ड फ़ाइल किसी भी प्लगइन को लागू नहीं करती है।
बेंजामिन मस्कको

6
आप एक विशेष परियोजना के लिए निर्भरता प्राप्त कर सकते हैं: प्रोजेक्ट का उपयोग करते हुए: निर्भरता
mbonnin

2
एंड्रॉइड स्टूडियो प्लगिन - निर्भरता का विश्लेषण करने के लिए ग्रेड देखें
जिग्नेश पटेल

3
यदि आप रैपर का उपयोग करते हैं:./gradlew dependencies
स्क्रैपीडेव

152

यदि आपको कंसोल आउटपुट को नेविगेट करना कठिन लगता है gradle dependencies, तो आप प्रोजेक्ट रिपोर्ट प्लगइन जोड़ सकते हैं :

apply plugin: 'project-report'

और एक HTML रिपोर्ट का उपयोग कर उत्पन्न करें:

$ ./gradlew htmlDependencyReport

रिपोर्ट सामान्य रूप से पाई जा सकती है build/reports/project/dependencies/index.html

यह इस तरह दिख रहा है: यहाँ छवि विवरण दर्ज करें


2
मेरे लिए यह सिर्फ थाgradle htmlDependencyReport
रिचर्ड टिंगल

2
यह मल्टीमॉडल परियोजनाओं के लिए काम नहीं करता है। मैं सिर्फ सूची देखता हूं और खाली करता हूं।
एडम एरॉल्ड

1
शानदार खोज। प्लगइन वास्तव में अधिक docs.gradle.org/current/userguide/project_report_plugin.html
ruX

78

Android Studio में (कम से कम v2.3.3 के बाद) आप UI से सीधे कमांड चला सकते हैं:

पर क्लिक करें Gradle टैब और फिर डबल क्लिक करें पर : yourmodule -> कार्य -> एंड्रॉयड -> androidDependencies

वृक्ष को ग्रेड कंसोल टैब में प्रदर्शित किया जाएगा

एक छवि एक हजार शब्दों के लायक है


1
मैं "प्रोजेक्ट प्रोजेक्ट" कैसे देख सकता हूँ?
user3526

1
@ user3526 आपकी स्क्रीन के दाईं ओर पाए गए "ग्रेडेल" टैग पर क्लिक करें। संदर्भ के लिए संलग्न छवि को देखें
निकोलस

2
मैंने पाया कि यह एक पेड़ के बजाय एएस 3.2.0 में एक फ्लैट सूची बनाता है। कमांड लाइन संस्करण हालांकि एक पेड़ बनाता है।
टॉम

5
@ 'सहायता' श्रेणी के अंतर्गत 'डिपेंडेंस' कार्य को 'एंड्रॉइड' नहीं। यह पेड़ के रूप में दिखाता है
मैक्सिम बेरेज़ोव्स्की

27

अक्सर पूर्ण test, compileऔर androidTestCompileनिर्भरता ग्राफ एक साथ जांच करने के लिए बहुत अधिक है। यदि आप केवल compileनिर्भरता ग्राफ का उपयोग करना चाहते हैं:

./gradlew app:dependencies --configuration compile

स्रोत: ग्रेडल डॉक्स सेक्शन 4.7.6

नोट: compileग्रैडल के अधिक हाल के संस्करणों में चित्रित किया गया है और अधिक हाल के संस्करणों में आपको सलाह दी जाती है कि आप अपनी सभी compileनिर्भरताओं को शिफ्ट करें implementation। कृपया इस उत्तर को यहाँ देखें


4
बस एक नोट: संकलन को हटा दिया गया है, लोगों को अब कार्यान्वयन के लिए आगे बढ़ना चाहिए
reinaldomoreira

25

यदि आप ग्राफ़ में अपनी निर्भरता की कल्पना करना चाहते हैं तो आप ग्रेडल-डिपेंडेंसी-ग्राफ-जनरेटर प्लगइन का उपयोग कर सकते हैं ।

आम तौर पर इस प्लगइन का आउटपुट बिल्ड / रिपोर्ट्स / डिपेंडेंसी-ग्राफ डायरेक्टरी में पाया जा सकता है और इसमें तीन फाइल्स (.p .png | .svg) होती हैं, यदि आप प्लगइन के 0.5.0 वर्जन का उपयोग कर रहे हैं ।

एक वास्तविक अनुप्रयोग में निर्भरता ग्राफ का उदाहरण ( शतरंज की घड़ी ):

ग्राफ


हे डेविड, जैसा मैंने प्लगइन निर्देशों में बताया था। मैंने प्रोजेक्ट ग्रेड में प्लगइन लागू किया लेकिन मैं बिल्ड डायरेक्टरी में कोई रिपोर्ट फ़ोल्डर नहीं देख रहा हूं। क्या हमें प्रोजेक्ट बनाने और चलाने के अलावा कुछ और करने की जरूरत है?
एम ठक्कर

यह प्लगइन निर्भरता संस्करण और संघर्ष नहीं दिखाता है। इस तरह मावेन के लिए; 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

चीजें ग्रैडल में आगे बढ़ गई हैं, इसलिए मेरा मानना ​​है कि यह सवाल एक और जवाब देता है।
ग्रैडल 4.3 के बाद से, " बिल्ड स्कैन " पेश किए गए थे। सभी प्रासंगिक जानकारी ग्रेडल डॉक्स ( 1 , 2 ) में उपलब्ध है। मेरे लिए, यह अब स्पष्ट, व्यवस्थित तरीके से अपनी निर्भरता (और आमतौर पर आपके निर्माण) की जांच करने का सबसे आसान तरीका लगता है।

वे बनाना बहुत आसान है, बस निष्पादित करें:

gradle build --scan  

(या ./gradlew build --scanयदि आप एक आवरण का उपयोग करते हैं)

यह एक बेतरतीब ढंग से उत्पन्न लिंक का उत्पादन करता है जहाँ आप अपना स्कैन देख सकते हैं। उस लिंक को खोलते समय, आप अपना ईमेल दर्ज करते हैं और लिंक का पूर्ण नियंत्रण प्राप्त करते हैं: जैसे। इसे साझा करें या इसे हटाएं। यह आपके निर्माण के बारे में बहुत सारी जानकारी मिली है , न कि केवल निर्भरता पर। आप अपनी निर्भरता, उनके पदानुक्रम, उन्हें प्राप्त करने के लिए उपयोग किए जाने वाले भंडार देख सकते हैं, लेकिन आपके निर्माण के बारे में अन्य सामान भी, अर्थात् इसका प्रदर्शन (जो कि बड़े जटिल बिल्डों में रुचि रखता है), आपके परीक्षण, यहां तक ​​कि आपके कंसोल आउटपुट और आपके सिस्टम कॉन्फ़िगरेशन, जिसमें JDK और JVM का उपयोग किया गया था, अधिकतम हीप आकार आदि।

यह एक मॉक प्रोजेक्ट का प्रिंटस्क्रीन है:

स्कैन उदाहरण बनाएँ

बिल्ड स्कैन एक बिल्ड का एक साझा करने योग्य रिकॉर्ड है जो कि क्या हुआ और क्यों करता है, में अंतर्दृष्टि प्रदान करता है। आप मुक्त करने के लिए scan.gradle.com पर एक बिल्ड स्कैन बना सकते हैं।

हालाँकि, नोट करें कि आपकी निर्माण प्रक्रिया की जानकारी ग्रैडल सर्वरों को भेज दी जाएगी । जब आप अपने निरीक्षण के साथ समाप्त हो जाते हैं तो आपको इसे हटाने का पूर्ण नियंत्रण होता है।

अंत में, आप 4.3 से पहले के ग्रेड संस्करणों के साथ बिल्ड स्कैन का उपयोग कर सकते हैं, आपको बस अपनी बिल्डस्क्रिप्ट में मैन्युअल रूप से स्कैन प्लगइन जोड़ना होगा।

संपादित करें :
टिप्पणियों से कुछ अतिरिक्त नोट्स में कुछ प्रतिक्रिया को शामिल करना:
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) ग्रैडल एंटरप्राइज में आप अपने स्वयं के सर्वर में ग्रेड बिल्ड बिल्ड को होस्ट कर सकते हैं। हालाँकि मुझे इसमें कोई अनुभव नहीं है और मेरा प्रस्तावित दृष्टिकोण मानक ग्रेड वितरण के बारे में था, जो आपके बिल्ड स्कैन के लिए ग्रेडल के सर्वर का उपयोग कर रहा था।

3) ग्रैड ही आपकी अधिकांश बिल्ड समस्याओं से निपटने के तरीके के रूप में बिल्ड स्कैन को बढ़ावा देता है।


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
आप लिंक पर जा सकते हैं और स्कैन को तुरंत हटा सकते हैं, बिना ईमेल या कुछ भी। उत्तर के रूप में, मेरा मानना ​​है कि यह प्रश्न का उत्तर देता है । वास्तव में, यह आपको अन्य दृष्टिकोणों की तुलना में आपकी निर्भरता के बारे में अतिरिक्त जानकारी दिखाता है (और अतिरिक्त मील जा रहा है: संपूर्ण निर्माण के लिए अतिरिक्त जानकारी)। यदि आप इसे अपनी पसंद के अनुसार नहीं पाते हैं तो यह पूरी तरह से ठीक है, लेकिन यह (मेरी जानकारी के लिए) नौकरी के लिए अभी सबसे व्यापक उपकरण है, इसलिए इसे ध्यान में रखना मूल्यवान है। अंत में, यह
ग्रैडल

@ मिचल सॉरी, आपको टैग करना भूल गया, इससे पहले आपने मेरी टिप्पणी नहीं देखी होगी। (मैंने उन टिप्पणियों को शामिल करने के लिए पोस्ट को भी संपादित किया, जिनके साथ मैंने आपको उत्तर दिया।)
tryman

2
मैंने कोशिश नहीं की है - शर्तों को स्वीकार करने के बारे में स्पष्ट करने के लिए धन्यवाद। मैंने अपना -1 निकाला।
मीकल

9

Android स्टूडियो में

1) ओपन टर्मिनल और सुनिश्चित करें कि आप प्रोजेक्ट के रूट फ़ोल्डर में हैं।

2) भागो ./gradlew app:dependencies (यदि ग्रेडर रैपर का उपयोग नहीं किया गया है, तो कोशिश करें gradle app:dependencies)

ध्यान दें कि रनिंग ./gradle dependenciesआपको केवल प्रोजेक्ट के रूट फ़ोल्डर की निर्भरता का पेड़ देगा, इसलिए उपरोक्त तरीके से एप्लिकेशन का उल्लेख करना, अर्थात ./gradlew app:dependenciesमहत्वपूर्ण है।


1
मेरे लिए इसने "./" के बिना काम किया, जैसे: gradlew ऐप: निर्भरता।
गिल्ड लेविंसन

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>:dependenciesयदि इसके build.gradle तक पहुंचने से पहले मॉड्यूल के पास अतिरिक्त निर्देशिका हो। जब संदेह हो, तो ./gradlew tasks --allनाम की जांच करें।


7

मेरे लिए, यह केवल एक आदेश था

in build.gradle जोड़ें plugin

apply plugin: 'project-report'

और फिर cmd पर जाएं और कमांड का पालन करें

./gradlew htmlDependencyReport

यह मुझे एक HTML रिपोर्ट WOW Html रिपोर्ट देता है report

मेरे सभी भगवानों।


इसका उत्तर देवस्त्र पहले ही दे चुका है।
brute_force 15:10

हां, थैंक्यू @brute_force उस समय यह मुझे दिखाई नहीं दे रहा था। तुम क्या चाहते हो, मेरा उत्तर हटा दो।
दपिंदर सिंह

1

ग्रेडेल के हाल के संस्करणों के लिए (मैंने 6.4.1 संस्करण के साथ परीक्षण किया):

gradle dependencies --configuration compileClasspath

या यदि आप ग्रैडल रैपर का उपयोग कर रहे हैं:

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डिफ़ॉल्ट रूप से निर्भरता के एससीआई ग्राफ को प्रिंट करके शुरू कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.