2008-09-15 4 views
31

क्या उपकरण आपको जावा पैकेज चक्रीय निर्भरता, पता लगाने के लिए
जानते हुए भी लक्ष्य स्पष्ट रूप से विशिष्ट पता लगाया 'भर-संकुल चक्र' में शामिल कक्षाएं सूची में है कि सिफारिश करेंगे?जावा पैकेज चक्र का पता लगाने: इसमें शामिल विशिष्ट वर्गों को कैसे ढूंढें?

मुझे classycle और JDepend के बारे में पता है, लेकिन वे दोनों चक्रीय पैकेज निर्भरता में शामिल कक्षाओं को सूचीबद्ध करने में विफल रहते हैं।
Metrics में चक्रों का एक दिलचस्प ग्राफिकल प्रतिनिधित्व है, लेकिन फिर संकुल तक सीमित है, और कभी-कभी पढ़ने में काफी मुश्किल होती है।

मैं पाने के लिए थक गया हो रही है एक:

"आप उन 3 संकुल के बीच एक पैकेज चक्र निर्भरता
आप सही वर्गों की खोज प्रत्येक
अच्छी किस्मत में xxx श्रेणियां होती हैं और इस चक्र को तोड़ दें "

क्या आप किसी भी उपकरण को जानते हैं जो पूर्व लेता है वास्तव में आपको समझाने के लिए ट्रा चरण क्यों चक्र का पता चला है (यानी। 'शामिल वर्गों की सूची')?


Riiight ... परिणाम की घोषणा करने के समय:

@ l7010.de प्रयास के लिए धन्यवाद। मैं आपको वोट दूंगा (जब मेरे पास पर्याप्त प्रतिनिधि होगा), खासकर 'सीएपी' के जवाब के लिए ... लेकिन सीएपी पानी में मर चुका है और अब मेरे ग्रहण 3.4 के साथ संगत नहीं है। बाकी वाणिज्यिक है और मैं केवल देखने के लिए फ्रीवेयर

@ daniel6651 धन्यवाद लेकिन, के रूप में कहा, फ्रीवेयर केवल FindBugs का नियमित उपयोगकर्ता के रूप में (खेद यह पहली जगह में उल्लेख नहीं किया है)

@izb (अभी नवीनतम 1.3.5 का उपयोग करके), मैं आपका जवाब स्वीकार करने के लिए एक क्लिक दूर हूं ... यदि आप मुझे समझा सकते हैं कि किसी भी चक्र का पता लगाने के लिए findbug के लिए सक्रिय करने के लिए कौन सा विकल्प है। उस सुविधा का केवल 0.8.7 version in passing के लिए उल्लेख किया गया है (कक्षा 'के बीच परिपत्र निर्भरता खोजने के लिए' नया स्टाइल डिटेक्टर देखें), और मैं इसका परीक्षण करने में सक्षम नहीं हूं।
अद्यतन: अब काम करता है, मेरे पास पुरानी खोजबग कॉन्फ़िगरेशन फ़ाइल थी जिसमें वह विकल्प सक्रिय नहीं था। मैं अभी भी CAD हालांकि चाहते;)

उत्तर है ... देख my own (second) answer below

+0

बस इसके बजाय उत्तर में प्रश्न डालें। एक साथ जीप जानकारी। –

उत्तर

12

Findbugs परिपत्र वर्ग निर्भरताओं का पता लगा सकते हैं, और एक ग्रहण प्लगइन भी है।Structure101 & Lattix जो इस उद्देश्य के लिए इस्तेमाल किया जा सकता:

http://findbugs.sourceforge.net/

1

करना चाहिए और आप ओपन सोर्स टूल सीएपी का उपयोग कर सकते हैं जो एक ग्रहण प्लगइन है। http://cap.xore.de/ सीएपी में एक ग्राफिकल पैकेज दृश्य है जो आपको कक्षाओं के लिए लाइन दिखाएगा ताकि कुछ क्लिक (सर्कल के आकार के आधार पर) आपको अपराधी मिलेगा।

0

कुछ वाणिज्यिक उपकरण हैं।

1

पहला संभव उत्तर है ... सुंदर नहीं। लेकिन यह तब होता है जो मैं करता हूं। (एक बेहतर समाधान presented below)

Dependency Finder! Download it, इसे अनजिप करें।

कभी भी सबसे आधुनिक या सक्रिय प्रोजेक्ट नहीं है, लेकिन यदि आप [निर्भरता खोजक] /bin/DependencyFinder.bat संपादित करते हैं, तो DEFAULT_DEPENDENCYFINDER_HOME के ​​लिए अपना पथ जोड़ें, JAVA_HOME सेट करें, आप इसे लॉन्च कर सकते हैं।

फिर आप 'निकालें' बटन (CTRL-E - पहला बटन) पर क्लिक करें, अपने कक्षा पथ दर्ज करें, और इसे स्कैन करें।

मुश्किल भाग परिणाम में विवरण के स्तर से घिरा नहीं गया है, ताकि 'प्रोग्रामिंग तत्व' और 'बंद' आइटम के सही सेट पर क्लिक करना मुश्किल हो।

  • का चयन केवल बाईं ओर में 'वर्गों' ('प्रोग्रामिंग तत्वों')
  • का चयन केवल 'वर्गों' सही पक्ष में ('बंद')
  • ऐड "/javax?./,/ org./,/sun./ "बहिष्कार पैटर्न (दोनों प्रोग्रामिंग तत्वों और बंद होने के लिए)
  • क्लिक पहियों पर (पिछले बटन - कंप्यूट सब - CTRL ए) के रूप में

और यहाँ तुम जाओ।
जब भी आप '< ->' देखते हैं, तो आपको अपने आप को चक्रीय निर्भरता मिल गया है।
(आप 'बंद' ओर 'सुविधाओं' का चयन करते हैं,
आप भी पता कर सकते हैं समारोह चक्र को गति प्रदान करता है - भयानक -)

मैं किसी भी अन्य सुझावों का परीक्षण करने के लिए तैयार हूँ।

21

खैर ... DepFinder presented above परीक्षण के बाद, यह पता चला है यह आसान निर्भरता की एक त्वरित का पता लगाने के लिए बहुत अच्छा है, लेकिन यह वर्गों की संख्या के साथ अच्छी तरह पैमाने पर नहीं है ...

तो असली वास्तविक उत्तर है : CDA - Class Dependency Analyzer

यह तेजी से है, अप-टू-डेट, उपयोग में आसान और वर्गों के चित्रमय प्रतिनिधित्व और उनके परिपत्र निर्भरता के साथ प्रदान करता है। एक सपने के सच होने;)

आप एक workset जिसमें आप अपने वर्गों (.class) का ही निर्देशिका में प्रवेश बनाने के लिए (कोई ज़रूरत नहीं एक पूर्ण classpath
विकल्प होता है करने के लिए) "परिपत्र निर्भरता का पता लगाने - एएलटी - सी "विज्ञापन के रूप में काम करता है और मेरे 468 वर्गों का विश्लेषण करने के लिए घंटों तक CPU का 100% नहीं लेता है।
नोट: वर्कस्पेस को रीफ्रेश करने के लिए, आपको अपनी कक्षाओं का एक नया स्कैन ट्रिगर करने के लिए इसे फिर से खोलना होगा (!)।

screenshot

+0

वास्तव में अच्छा उपकरण। – 99Sono

3

हम Sonar का उपयोग पैकेज चक्र पता लगाने के लिए। यह निर्भरताओं का एक अच्छा ग्राफ खींचता है और दिखाता है कि कौन सी गलत दिशा में जाती है। आप स्रोत पर नेविगेट भी कर सकते हैं जहां निर्भरता का उपयोग किया जाता है।

देखें http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

+2

यह सुविधा सोनारक्यूब 5.2 ([सोनार -6553] (https://jira.sonarsource.com/browse/SONAR-6553) से हटा दी गई थी)। – SEBiGEM

3

Highwheel वर्ग और पैकेज चक्र का पता लगाता है और वर्ग/विधि/क्षेत्र स्तर (एक विधि हस्ताक्षर आदि की विरासत, संरचना, भाग) रिश्ते के प्रकार का संकेत करने के लिए नीचे dependences के स्रोत की रिपोर्ट ।

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

https://github.com/hcoles/highwheel

उत्पादन एम्बेडेड svg कि एक आधुनिक ब्राउज़र की आवश्यकता है साथ एचटीएमएल है।

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