2009-05-18 13 views
21

क्या किसी के पास क्लासपाथ में डुप्लिकेट जेएआर का पता लगाने के लिए कोड है?क्लासपाथ में डुप्लिकेट जेएआर का पता लगाने के लिए कैसे?

पृष्ठभूमि: जब क्लासपाथ में एक ही जेएआर के दो संस्करण होते हैं, तो वास्तव में अजीब चीजें हो सकती हैं। यह मेवेन जैसे टूल का उपयोग करते समय भी हो सकता है: निर्भरता बदलें और पहले सफाई के बिना WAR बनाएं। चूंकि target/webapp/WEB-INF/lib साफ़ नहीं किया गया था, निर्भरता दो बार वहां होगी।

क्या इसके लिए कोई सुरक्षा-नेट है?

+1

सत्यापित करें कि यह आपकी मदद कर सकता है: http: // stackoverflow।कॉम/प्रश्न/17555928/निकालें-डुप्लिकेट-जर्स-इन-ए-डायरेक्ट्रॉय/20611435 # 20611435 –

उत्तर

22

JBoss Tattletale इससे आपकी सहायता कर सकता है।

यह एक निशुल्क टूल है जो आपके प्रोजेक्ट द्वारा उपयोग की जाने वाली जेएआर फाइलों को स्कैन करता है और आपको उनके बारे में एक रिपोर्ट देता है।

अपनी सुविधा के बीच कर रहे हैं:

  • स्पॉट यदि एक वर्ग कई जार फ़ाइलों
  • स्पॉट अगर एक ही JAR फ़ाइल कई स्थानों में स्थित है
  • भिन्न संस्करण हो कि इसी तरह जार फ़ाइलों का पता लगाएं में स्थित है संख्या
1

मुझे लगता है कि सरलतम तरीका केवल लक्ष्य निर्देशिका को ट्रैश करना है। उम्मीद है कि सभी .jar फाइलों की प्रतिलिपि बनाना समय लेने वाला नहीं होगा।

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

-2

आप प्रत्येक जार फ़ाइल के md5 योग की तुलना अन्य हर जार फ़ाइल से करने और रास्ते में डुप्लीकेट हटाने के लिए एक साधारण स्क्रिप्ट लिख सकते हैं।

+2

दो संस्करणों का अर्थ परिभाषा के अनुसार है कि md5 sum मेल नहीं करेगा :-) –

+0

आह क्षमा करें, आपके प्रश्न के विभिन्न संस्करण भाग को याद किया – neesh

2

System.getProperty("java.class.path"), इसे विभाजित, तरह यह, मानव आँख :-) के साथ इसे देखो।

यह classpath अन्य जार तू :-(अंदर प्रकट होता है से प्राप्त शामिल होंगे नहीं

या के रूप में पोस्टर से एक ने सुझाव http://www.jboss.org/tattletale का उपयोग

+0

यह मानता है कि आपके डुप्लिक का एक ही नाम है। अक्सर समस्या अलग-अलग नामों के साथ जार में डुप्लिकेट कक्षाएं होती है। आपको वहां एक से अधिक जोड़ी की आंखों की आवश्यकता होगी। – sal

+0

आमतौर पर, नाम केवल एक संस्करण में अलग-अलग होंगे (आमतौर पर एक प्रत्यय)। प्रोग्रामेटिक रूप से आप सामान्य उपसर्गों का पता लगा सकते हैं और हाइलाइट कर सकते हैं। –

+0

आपको कुछ मामलों में केवल कुछ चेतावनी संकेत की आवश्यकता है। मैंने जो प्रस्तावित किया है उसे 2 मिनट में कोड किया जा सकता है और एप्लिकेशन स्टार्टअप पर "सामान्य/आसान" डुप्लिकेट को पकड़ने के लिए कुछ प्रकार के धूम्रपान परीक्षण के रूप में चलाया जा सकता है। यदि आप विस्तृत विश्लेषण चाहते हैं तो टूललेट जैसे प्रस्तावित टूल का उपयोग करें :-)। –

4

सिर्फ करने के लिए है कि एक Maven प्लगइन है:।। maven-duplicate-finder-plugin

[संपादित करें] आप इकाई में यह करने के लिए परीक्षण अपने आप को, उपयोग करना चाहते हैं

getClass().getClassLoader().getResources("com/pany/package/Java.class") 

यदि यह एक से अधिक URL देता है, तो आपके पास क्लासपाथ पर डुप्लीकेट होते हैं।

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

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