2011-11-10 8 views
6

मेरे पास एक मिलियन जार (अच्छी तरह से, बहुत कुछ) वाला एक प्रोजेक्ट है। वे मेरे पास मेवेन द्वारा आए, और मैं केवल कार्यक्षमता के एक छोटे से सेट का उपयोग करता हूं। स्वच्छता के लिए, मैं उन जारों के साथ सोच रहा था जो मैं बिना कर सकता था।कोड कवरेज द्वारा अप्रयुक्त जार का निर्धारण करें?

मेरा पहला विचार प्रोग्राम को कोड-कवरेज टूल के साथ चलाने के लिए था, और फिर छुपाए गए वर्गों को ढूंढना था।

क्या किसी ने इससे पहले किया है? या क्या इसे हासिल करने के लिए स्मार्ट चाल हैं?

+0

एक करके classpath एक से जार हटाने ई पर पिछले फिर से जोड़ना हटाया जब निर्माण टूट जाता है –

+2

@ratchet सनकी - बुरा विचार है, अप्रत्यक्ष क्रम निर्भरता का पता लगाने नहीं होगा जब तक निर्माण पूर्ण एकीकरण के परीक्षण भी शामिल है। –

+0

@ratchet freak - यह काम कर सकता है, लेकिन यह मेरी ब्रूट फोर्स आखिरी बहाली है। – RobAu

उत्तर

4

आप -verbose:class वीएम विकल्प का उपयोग कर प्रोजेक्ट चला सकते हैं। यह उन सभी भारित वर्गों के लिए प्रिंट करेगा जहां से उन्हें लोड किया जाता है। कुछ स्मार्ट पार्सिंग ऐप/grep/regexp का उपयोग करने से आप जार नामों को अद्वितीय प्रविष्टियों के सेट में फ़िल्टर कर सकते हैं और आपको बताएंगे कि कौन सा उपयोग किया जाता है।

मुझे लगता है कि यह आसान होगा क्योंकि यह स्वचालित रूप से आपको बताएगा कि कक्षा का उपयोग किया जाता है और यदि ऐसा है तो जार।

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

संभव सुझाव linux का उपयोग करते समय:।

java -verbose:class <your startup command here> | grep "\[Loaded" | grep -o "from .*\]" | cut -c 6- | sort | uniq

आप लिनक्स का उपयोग नहीं कर रहे हैं, तो फिर एक फाइल करने के लिए बचाने के लिए, लिनक्स मशीन प्राप्त करें और लिनक्स पर चलें (या विंडोज़ पर बैश कमांड चलाने के लिए कुछ उपयोग करें)

+0

धन्यवाद, यह शायद जाने का सबसे आसान तरीका है। मुझे आश्चर्य है, क्योंकि अधिक से अधिक लोगों के पास यह सवाल होगा, अगर किसी के पास पहले से ही कुछ कोड है तो यह एक अच्छा अभ्यास है, लेकिन पहिया को फिर से क्यों शुरू करें .. – RobAu

+1

@RobAu लिनक्स के लिए एक उदाहरण जोड़ा गया। आदर्श नहीं है, लेकिन चाल है। – Thirler

0

Dependency Finder या JDepend जैसे उपकरण का उपयोग करने पर विचार करें।

सभी स्थिर विश्लेषण उपकरण के साथ, प्रतिबिंब या डी ढांचे का उपयोग इसे फेंक सकता है; मैंने कस्टम टूल्स का सहारा लिया है जो चीजों को समझने के लिए इस और अन्य इनपुट का उपयोग करते हैं, हालांकि यह अभी भी स्थिर है।

पूर्ण रनटाइम उपयोग जानकारी के लिए आप थर्लेर के समाधान का उपयोग कर सकते हैं, हालांकि यह पूरा हो गया है या नहीं, इस पर निर्भर करता है कि कौन से कोड पथ का पालन किया जाता है।

0

आप अपने निर्भरता पेड़ का विश्लेषण करने के लिए Maven Dependency Plugin का उपयोग कर सकते हैं। यह आपको उन परियोजनाओं का भी सुझाव देगा जो आपके प्रोजेक्ट में डाउनलोड/जोड़े गए हैं क्योंकि वे किसी भी अन्य जार पर निर्भर हैं।

mvn dependency:tree चलाएं और देखें कि आप कुछ अपरिचित जार का उपयोग कर रहे हैं या नहीं।

+0

यह काम नहीं करेगा, क्योंकि मुझे गतिशील व्यवहार की आवश्यकता है, स्थिर विश्लेषण नहीं। – RobAu

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