2010-04-09 4 views
8

कम करें मैंने जावा प्रोजेक्ट के लिए एक मॉड्यूल विकसित किया है। मॉड्यूल बाहरी पुस्तकालय (fastutil) पर निर्भर करता है। समस्या यह है कि fastutil.jar फ़ाइल पूरी परियोजना (14 एमबी) की तुलना में दो गुना भारी है। मैं पुस्तकालय से कक्षाओं के केवल एक छोटे से सबसेट का उपयोग करता हूं। मॉड्यूल अब समाप्त हो गया है, और भविष्य में इसे विस्तारित करने की संभावना नहीं है। क्या कोई तरीका है कि मैं केवल fastutil_small.jar पर प्रासंगिक वर्ग निकाल सकता हूं ताकि अन्य को यह अतिरिक्त वजन डाउनलोड न करना पड़े?बाह्य जार फ़ाइल आकार

+0

असल में आप क्या चाहते हैं? – Venkat

+0

ठीक है, प्रोजेक्ट में अपना मॉड्यूल जोड़ने के लिए। यह अपेक्षाकृत छोटे जावा पैकेजों में से कुछ है। मैं चाहता हूं कि 'फास्टुटिल' से कुछ वर्गों पर मेरी निर्भरता परियोजना के आकार को तीन गुना बढ़ाए। –

उत्तर

8

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

आप कठिन की कीमत पर और भी अधिक स्थान बचाने के लिए ही नहीं सुविधा का उपयोग कर सकते हैं और पहले से ही कुछ काफी बचत

मिल या आप अन्य अंतरिक्ष की बचत कहानियो तकनीक (जैसे वर्ग और विधि नाम के रूप में) के साथ जोड़ सकता डीबगिंग (आपके स्टैक निशान पार्स के लिए कठिन हो जाएंगे)।

+1

+1 पहले 5 शब्द ठीक वही हैं जो मैं सोच रहा था, क्योंकि मैंने इस प्रश्न को –

+0

प्रोजेवार्ड निर्देशों से पढ़ा है: 'प्रोगार्ड को इनपुट जार के लाइब्रेरी जार (या युद्ध, कान, ज़िप या निर्देशिका) की आवश्यकता होती है निर्दिष्ट। ये अनिवार्य रूप से पुस्तकालय हैं जिन्हें आपको कोड संकलित करने की आवश्यकता होगी। ProGuard उन उचित निर्भरताओं के लिए आवश्यक वर्ग निर्भरताओं का पुनर्निर्माण करने के लिए उनका उपयोग करता है। लाइब्रेरी जार स्वयं हमेशा अपरिवर्तित रहते हैं। आपको अभी भी उन्हें अपने अंतिम आवेदन के वर्ग पथ में रखना चाहिए। ' लेकिन लाइब्रेरी जार फ़ाइलों के आकार को कम करना बिल्कुल वही है जो मैं चाहता हूं (या मैं गलत शब्दावली का उपयोग कर रहा हूं?)। मैं क्या खो रहा हूँ? –

+0

@joe: आप आसानी से इस पर काम कर सकते हैं के माध्यम से '-injars' और' -libraryjars' अंत में –

0

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

5
fastutil की installation instructions से

:

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

+0

हां, मैंने rtfm किया :) मैंने अभी तक इसके साथ कुछ भी उपयोगी करने में काफी प्रबंधन नहीं किया है (नोब, याद है? :)) –

+1

अच्छा, पता चला, मुझे बस इतना करना था कि इसे तीन बार कोशिश करें। –

2

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