2013-10-15 4 views
6

मेरे पास एक प्रणाली है जिसमें कई वेब अनुप्रयोग (युद्ध) और पुस्तकालय (जार) शामिल हैं। वे सभी मेवेन का उपयोग कर रहे हैं और मेरे नियंत्रण में हैं (स्रोत कोड, नेक्सस में निर्मित कलाकृतियों, ...)। मान लें कि एप्लिकेशन ए लाइब्रेरी एल 1 का उपयोग कर रहा है और एल 2 अप्रत्यक्ष रूप से (इसका उपयोग एल 1 से किया जाता है)। मैवेन की निर्भरता का उपयोग करके, मैं एप्लिकेशन से निर्भरता पेड़ को ऊपर-नीचे आसानी से देख सकता हूं: पेड़ या ग्राफ: प्रोजेक्ट प्लगइन्स। लेकिन मैं कैसे जांच सकता हूं, मेरी लाइब्रेरी का उपयोग कौन कर रहा है? मेरे उदाहरण से, मैं जानना चाहता हूं कि क्या एल 1 का उपयोग कर एकमात्र एप्लिकेशन (या लाइब्रेरी) है और एल 2 का उपयोग एल 1 से किया जाता है और किसी अन्य एप्लिकेशन से, बी कहें बी। क्या मैवेन या नेक्सस के लिए कोई प्लगइन है या क्या मुझे कोशिश करनी चाहिए इसके लिए कुछ लिपि लिखने के लिए? आपके सुझाव क्या हैं?मेरे मेवेन आर्टिफैक्ट का उपयोग कौन कर रहा है?

+1

यह बहुत उपयोगी होगा, मुझे इस कार्यक्षमता की कई बार आवश्यकता थी :-) हां, मुझे विश्वास नहीं है कि ऐसी चीज मौजूद हो सकती है। हो सकता है कि कुछ टूल जो आपके कार्यक्षेत्र में परियोजनाओं को स्कैन करते हैं, लेकिन यह कितना संभव हो सकता है कि आपके डोमेन के बाहर अपने जीवन जीने के लिए कौन सी परियोजनाएं हैं, इसका उपयोग कर रहे हैं ... – alterfox

उत्तर

4

आप भंडार स्तर पर इस लक्ष्य को हासिल करना चाहते हैं, अपाचे Archiva एक परियोजना जानकारी

See screenshot के तहत सूचीबद्ध सुविधा "द्वारा प्रयोग किया जाता है।"

यह mvnrepository.com के समान है जो एक आर्टिफैक्ट विवरण के "उपयोग द्वारा" अनुभाग के अंतर्गत सूचीबद्ध है।

दुर्भाग्यवश, नेक्सस समकक्ष सुविधा प्रदान नहीं करता है।

अब मुझे लगता है कि इसके लिए अभी तक एक और भंडार बनाए रखने में परेशानी होगी, लेकिन फिर यह कुछ अन्य उत्तर सुझावों जैसे कि नेक्सस को प्लगइन लिखने से कहीं अधिक आसान होगा। मेरा मानना ​​है कि आर्किवा को अन्य भंडारों को प्रॉक्सी करने के लिए कॉन्फ़िगर किया जा सकता है।

अद्यतन

वास्तव में, वहाँ भी एक plugin for Nexus है प्राप्त करने के लिए सुविधा "द्वारा प्रयोग किया जाता"।

+0

+1: यह वही है जो मैं देख रहा हूं, दुर्भाग्य से नेक्सस के लिए नहीं। – Kojotak

+0

मैंने उत्तर अपडेट किया है। निश्चित रूप से इस प्लगइन की जांच करें। – Boj

+0

यह प्लगइन बहुत दिलचस्प लग रहा है। मैं इसे भी देख लूंगा .. –

2

मुझे नहीं लगता कि ऐसा करने के लिए एक मेवेन तरीका है। ऐसा कहा जा रहा है, इस या इसी तरह की चीजों को करने के तरीके हैं। यहां एक मुट्ठी भर उदाहरण हैं:

  • अपनी परियोजनाओं को अपने पसंदीदा आईडीई में खोलें। उदाहरण के लिए ग्रहण कक्षा स्तर पर प्रभाव विश्लेषण के साथ आपकी सहायता करेगा, जो अधिकतर समय पर्याप्त हो सकता है

  • अपनी स्रोत निर्देशिका पर एक साधारण "grep" का उपयोग करें। इसमें कुछ समय brusk (और साथ ही स्पष्ट करते हुए कहा) लगता है, शायद, लेकिन हम इस तरह के एक बहुत Sonargraph या Lattix

    रूप

  • उपयोग निर्भरता विश्लेषण उपकरणों

3

जहाँ तक मुझे पता के रूप में उपयोग किया है इन लाइनों के साथ कुछ भी ओपन सोर्स टूल के रूप में मौजूद नहीं है। आप एक नेक्सस प्लगइन लिख सकते हैं जो सभी पोमों के माध्यम से पुन: प्रयास करके और अन्य विश्लेषणों में आपके घटक के उपयोग के लिए एक रेपो और जांच करता है। यह दौड़ने के लिए एक बड़ा काम होगा हालांकि इसे सभी घटकों को देखना होगा और सभी पोम्स को पार्स करना होगा।

इसी तरह आप इसे किसी अन्य उपकरण के साथ स्थानीय भंडार पर कर सकते हैं। हालांकि यह स्थानीय भंडार के बजाय एक रेपो प्रबंधक की सामग्री को पार्स करने के लिए शायद अधिक समझ में आता है।

1

अधिक दिलचस्प है शायद: आप इस जानकारी के साथ क्या करेंगे? ए के डेवलपर्स को सूचित करें लाइब्रेरी L1 या L2 का उपयोग न करने के लिए, क्योंकि इसमें एक महत्वपूर्ण बग है? मेरी राय में आप अपने भंडार प्रबंधक पर निर्भरता/माता-पिता/प्लगइन की ब्लैकलिस्ट बनाने में सक्षम होना चाहिए। एक बार एक परियोजना एक ब्लैकलिस्टेड आर्टिफैक्ट के साथ खुद को तैनात/अपलोड करने का प्रयास करती है, तो इसे असफल होना चाहिए। मैं uploading और downloading नहीं कह रहा हूं, क्योंकि इससे कई परियोजनाएं तोड़ सकती हैं। जहां तक ​​मुझे पता है, यह अभी तक किसी भी भंडार-प्रबंधक के लिए उपलब्ध नहीं है।

+0

सोनाटाइप सीएलएम नेक्सस स्टेजिंग के एकीकरण के साथ बिल्कुल संभव बनाता है और सीएलएम नीतियां इसमें जेनकींस/हडसन और एक्लिप्स के साथ एकीकरण भी है ताकि आप बिल्डरों में विफल हो सकें या डेवलपर आपके घटकों का निरीक्षण कर सकें .. –

+0

मुझे एक्सटेंशन के साथ संभावनाओं के बारे में पता था, लेकिन उपयोग में आसान समाधान नहीं था। धन्यवाद। –

+0

मैं इस जानकारी का पुन: उपयोग और परीक्षण के लिए उपयोग करूंगा। अगर मैंने एक पुस्तकालय में कुछ बग तय कर दिया है, तो किस एप्लिकेशन का परीक्षण किया जाना चाहिए? यदि पुस्तकालय (या पुस्तकालय से विधि/वर्ग/पैकेज) अप्रचलित हो जाता है, तो कौन से अनुप्रयोग (और अन्य पुस्तकालयों) को दोबारा शुरू किया जाना चाहिए? हां, सबसे बड़े असंगत परिवर्तनों को पकड़ने के लिए इकाई और एकीकरण परीक्षण हैं, लेकिन वे हमेशा पर्याप्त नहीं होते हैं। – Kojotak

1

इस समस्या से संपर्क करने के तरीकों में से एक जावा के बाहर ही है: एक ओएस-स्तरीय निगरानी स्क्रिप्ट लिखें जो प्रश्न के तहत जार फ़ाइल पर फॉपेन() के प्रत्येक मामले को ट्रैक करता है! मान लीजिए कि यह एक कॉर्पोरेट वातावरण में है, आपको कम से कम एक बार लाइब्रेरी तक पहुंचने के लिए सभी उपयोग प्रक्रियाओं को अनुमति देने के लिए कुछ हफ्तों (!) की प्रतीक्षा करनी पड़ सकती है!

Windows पर, आप यह करने के लिए उपयोग कर सकते हैं Sysinternals प्रक्रिया मॉनिटर: http://technet.microsoft.com/en-us/sysinternals/bb896645

यूनिक्स वेरिएंट पर, आप DTrace या strace का प्रयोग करेंगे।

2

मुझे इस नौकरी के लिए किसी भी सार्वजनिक पुस्तकालय से अवगत नहीं है, इसलिए मैंने एक अनुकूलित ऐप लिखा जो मेरे लिए यह करता है। मैं एक वितरण के साथ काम करता हूं जिसमें 70 से अधिक कलाकृतियों को एक साथ बंडल किया गया है। एक आर्टिफैक्ट को संशोधित करने के कई बार, मैं यह सुनिश्चित करना चाहता हूं कि परिवर्तन पिछड़े संगत हों (यानी निर्भर कलाकृतियों में कोई संकलन त्रुटियां पेश नहीं की जाती हैं)। इसे प्राप्त करने के लिए, संशोधित आर्टिफैक्ट के सभी आश्रितों को जानना महत्वपूर्ण था।

इसलिए, मैंने एक ऐप लिखा है जो एक निर्देशिका (/ उपनिर्देशिका) के तहत सभी कलाकृतियों के माध्यम से स्कैन करता है, संशोधित आर्टिफैक्ट की घटना के लिए अपने pom.xml और खोज (पोम के निर्भरता खंड में) निकालता है। (मैंने जावा में यह किया था हालांकि शैल/विंडोज स्क्रिप्ट यह और अधिक कॉम्पैक्टली कर सकती है।)

मुझे जिथब पर कोड साझा करने में खुशी होगी, अगर यह किसी भी मदद की हो सकती है।

+0

यह बहुत अच्छा विचार होगा! – Kojotak

+0

@Kojotak - कोड गिट स्थान पर होस्ट किया गया है: https://github.com/ShrutiTiwari/artifacto मुख्य श्रेणी: जारिंस्पेक्टर। मुख्य() विधि "apache-maven-3.0.4" लाइब्रेरी में "जूनिट" और "एथर" के आधार पर सभी कलाकृतियों को पाती है। विंडोज़ पर इसका परीक्षण किया गया (उम्मीद है कि यह लिनक्स के रूप में काम करेगा)। दृष्टिकोण में एक कमी है हालांकि - पारगमन निर्भरता नहीं पकड़ता है। –

+0

हे Kojotak! क्या आपको उद्देश्य के लिए उपयोगी गिटकोड मिला है (अगर आप इसे इस्तेमाल करते समय अटक जाते हैं तो मुझे बताएं)। मैंने कमांडलाइन-एर्ग इनपुट जैसे स्वीकार करने के लिए इसे संशोधित किया है। जूनिट के आधार पर मेवेन-डिस्ट्रीब्यूशन-लाइब्रेरी-कलाकृतियों की जांच करने के लिए, कमांड होगा: जावा-आर्टिफैक्टो-1.0.0-एसएनएपीएसएचओटी.जर सी: \ सॉफ्टवेयर \ स्थापना \ बिल्ड-टूल्स \ apache-maven-3.0.4 \ lib \t जूनिट –

2

आपकी ज़रूरतों के मुताबिक एक तरीका यह है कि आप अपने सभी मैवेन प्रोजेक्ट्स के साथ मास्टर-पोम बनाना चाहते हैं। फिर आप मास्टर-पोम पर निम्न आदेश चलाते हैं:

mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml 

जेड में जेनरेट की गई फ़ाइल खोलें।

बताए निर्देशों का उपयोग किया:, मेरे अनुभव से http://www.summa-tech.com/blog/2011/04/12/a-visual-maven-dependency-tree-view/

+0

मैंने मास्टर पोम को केवल अनुप्रयोगों पर निर्भर करने की कोशिश की है, लेकिन चूंकि उन्हें युद्ध के रूप में पैक किया जाता है, इसलिए पुस्तकालयों (जार) पर पारगमन निर्भरता शामिल नहीं थी। मैं बस सभी प्रोजेक्ट्स (ऐप्स और libs) पर निर्भर एक मास्टर पोम नहीं बना सकता, क्योंकि एक ही लाइब्रेरी के विभिन्न संस्करणों का उपयोग विभिन्न अनुप्रयोगों द्वारा किया जाता है और अलग-अलग निर्भरताएं होती हैं। – Kojotak

+0

मैं मैवेन कमांड सफलतापूर्वक भाग गया। लेकिन, yed में outputFile को खोलने का प्रयास करते समय मुझे अपवाद मिल रहा है: yEd में निम्न त्रुटि आई है: फ़ाइल निर्भरता.graphml आयात नहीं कर सका। कारण: org.xml.sax.SAXParseException; लाइन संख्या: 1; कॉलम संख्या: 1; प्रोलॉग में सामग्री की अनुमति नहीं है। \t com.sun.org.apache.xerces.internal.parsers.DOMParser.parse (DOMParser.java:251) –

1

IMHO और भी इस तरह के एक समस्या के लिए एक तकनीकी समाधान की तलाश में अक्सर एक overkill है। यदि आप यह जानना चाहते हैं कि आपकी आर्टिफैक्ट (लाइब्रेरी) का उपयोग कौन कर रहा है, क्योंकि आप आर्टिफैक्ट या कुछ समान बदलते समय पिछड़े संगतता को सुनिश्चित करना चाहते हैं, तो मुझे लगता है कि परंपरागत चैनलों का उपयोग करके अपने परिवर्तनों को संचारित करके और अन्य को प्रोत्साहित करके यह सर्वोत्तम होता है। टीम जो इसके बारे में बात करने के लिए आपकी लाइब्रेरी का उपयोग कर सकती हैं (प्रोजेक्ट ब्लॉग, विकी, ईमेल, एक प्रसिद्ध स्थान जहां दस्तावेज डाल दिए जाते हैं, जर्नल फिक्स इत्यादि)।

सिद्धांत रूप में, आप एक स्क्रिप्ट लिख सकते हैं जो आपके प्रोजेक्टरी में प्रत्येक प्रोजेक्ट को क्रॉल करता है और उसके बाद मेवेन build.xml (मानते हैं कि वे सभी मेवेन का उपयोग करते हैं) को देखते हैं और देखते हैं कि उन्होंने आपके आर्टिफैक्ट पर निर्भरता परिभाषित की है या नहीं। यदि आपके संगठन की सभी परियोजनाएं मानक मैवेन संरचना का पालन करती हैं, तो ऐसी एक स्क्रिप्ट लिखना आसान होना चाहिए (हालांकि यदि उन परियोजनाओं में से किसी एक को आपके आर्टिफैक्ट पर निर्भरता निर्भरता के माध्यम से निर्भरता है, तो चीजें थोड़ा और मुश्किल हो सकती हैं)।

संबंधित मुद्दे