2011-09-12 12 views
5

मुझे तीसरे पक्ष के जार से अप्रयुक्त कक्षाओं को हटाने की आवश्यकता है। मुझे उपकरण क्यों उपयोग करना चाहिए?तृतीय पक्ष पुस्तकालयों और JARs से अनैतिक कक्षाओं को हटा रहा है

मैंने पहले से ही ProGuard का उपयोग करने का प्रयास किया है। हालांकि, यह परियोजना से ही अप्रयुक्त वर्गों को हटा देता है लेकिन लाइब्रेरी जार - तीसरी पार्टी - हमेशा अपरिवर्तित बनी रहती है।

+0

आप तृतीय पक्ष जार से कक्षाओं को क्यों हटाना चाहते हैं? – Rakesh

+4

यह आमतौर पर एक बुरा विचार है, क्योंकि - [प्रतिबिंब] के लिए धन्यवाद (http://download.oracle.com/javase/tutorial/reflect/index.html) - वास्तव में यह जानने का कोई तरीका नहीं है कि कौन से वर्ग अप्रयुक्त हैं और कौन हैं नहीं, खासकर जब यह तीसरे पक्ष के जारों की बात आती है (यानी आपको पता नहीं है कि वे आंतरिक रूप से कैसे काम करते हैं)। –

+0

+ जुनास आपके उत्तर के लिए धन्यवाद। आप सही हैं, लेकिन [ProGuard] (http://proguard.sourceforge.net) प्रतिबिंब और आत्मनिरीक्षण को संभाल सकता है। तो, क्या कोई अन्य उपकरण है जो तीसरे पक्ष के जार के साथ ऐसा ही कर सकता है ?? –

उत्तर

4

आप एक uber जार बना सकते हैं और फिर ProGuard का उपयोग कर सकते हैं। जार में लाइब्रेरी कक्षाओं को दोबारा मरम्मत करना एक चुनौती होगी, लेकिन आपके प्रश्न की भावना से आप उबेर जार को पसंद करेंगे।

जैसा कि अन्य पोस्टर ने टिप्पणी की है, आपको अभी भी इतनी दुर्व्यवहार और गलतफहमी प्रतिबिंब तंत्र के माध्यम से लोड कक्षाओं के बारे में सावधान रहना होगा।

1

@ जुनास पुलक्का सही है। लेकिन यदि आप अभी भी वास्तव में ऐसा करना चाहते हैं और सुनिश्चित करें कि आपका आवेदन ClassNotFoundException के लिए विफल नहीं होगा, तो विकल्प -verbose: वर्ग के साथ अपना एप्लिकेशन चलाएं, मौजूद सभी उपयोगकाजों को निष्पादित करें, लॉग लोड करें जिसमें सभी लोड किए गए वर्ग शामिल हैं। फिर अपनी तीसरी पार्टी लाइब्रेरी के सभी वर्गों की सूची लें और अपनी लाइब्रेरी से सभी कक्षाएं दर्ज करें जिन्हें कभी लोड नहीं किया गया है। फिर वैकल्पिक जार फ़ाइल बनाएं जिसमें केवल "आवश्यक" कक्षाएं हों और प्रार्थना करें :)

शुभकामनाएं।

+0

+ एलेक्सआर लूल, मैं 35.7 एमबी जारों के बारे में बात कर रहा हूं। –

-5

जावा केवल उसी वर्ग को लोड करता है जब उनका उपयोग किया जाता है। कक्षाओं को हटाने से आप केवल समस्याएं पैदा कर सकते हैं और रनटाइम पर आपकी सहायता नहीं करेंगे। 36 एमबी कोड इतना नहीं है कि इसका केवल एक हिस्सा ही लोड किया जाएगा। आपके पास कितनी मेमोरी है? अधिकांश पीसी में कम से कम 2000 एमबी है, यदि आप धीमे लिंक पर अपना ऐपलेट या जावा वेबस्टार्ट एप्लिकेशन डाउनलोड कर रहे हैं तो मुझे लगता है कि आप पैक 200 (जार छोटे बनाने के लिए) का उपयोग कर रहे हैं और इसमें पहले से ही न्यूनतम पुस्तकालय शामिल हैं।

+2

+ लॉरी आपके उत्तर के लिए धन्यवाद और मैं आपके दृष्टिकोण को समझता हूं। हालांकि, आवश्यकताओं को जार से अप्रयुक्त वर्गों को खत्म करना और सभी जारों को एक ही एफएटी जार में रखना है। मुझे पता है कि यह बेकार हो सकता है लेकिन वे केवल इसे क्लीनर चाहते हैं। –

+0

आप उन्हें सभी को एक ही JAR में डाल सकते हैं। आपको उन्हें अवगत कराया जाना चाहिए कि यह एप्लिकेशन को अस्थिर और असमर्थनीय बना सकता है। अर्थात।जब, यदि नहीं, तो यह टूट जाता है कि आपने कम से कम उन्हें चेतावनी दी है कि यह एक बुरा विचार था। आप नहीं चाहते हैं कि वे आपकी नौकरी न करने के लिए दोषी ठहराते हैं जब वे जो पूछ रहे हैं वह अनुचित है। –

+0

+ लॉरी मैं इसे करूँगा। आपकी सलाह के लिए धन्यवाद :) –

0

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

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