आप कैसे निर्धारित करते हैं कि ढांचे की ऐसी और ऐसी सुविधा के लिए जार की आवश्यकता है? उदाहरण के लिए, केवल निर्भरता इंजेक्शन का समर्थन करने के लिए वसंत के लिए उपलब्ध सभी लोगों में से कौन से जार की आवश्यकता होगी?यह निर्धारित करना कि किसी सुविधा के लिए न्यूनतम जार की आवश्यकता है
उत्तर
ऐसे उपकरण हैं जो कम से कम जेएआर बनाते हैं, यह पता लगाकर कि वास्तव में कोड का विश्लेषण करके किसी वर्ग में कौन से वर्गों का उपयोग किया जाता है, फिर केवल एक नया जार बनाते हैं उन वर्गों। (। मैं Zelix Classmaster का उपयोग कर याद करते हैं यह करने के लिए है, लेकिन कई विकल्प हैं)
समस्या स्प्रिंग की तरह एक डि ढांचे के लिए इन उपकरणों का उपयोग के साथ शामिल हैं:
मौजूदा केवल पता लगाने स्थिर निर्भरता। यदि आप गतिशील रूप से कक्षाएं लोड करते हैं, तो आपको विशेष रूप से प्रत्येक के बारे में विश्लेषक को बताना होगा। सामान्य रूप से डी ढांचे, और विशेष रूप से वसंत गतिशील लोडिंग से भरा हुआ है, जिसमें गतिशील लोडिंग शामिल है जो एप्लिकेशन कोड के लिए अपारदर्शी है।
मौजूदा उपकरण जेएआर का उपयोग नहीं करते हैं, यह नहीं बताते कि कौन सी इनपुट जेएआर का उपयोग नहीं किया जाता है। जब आप एक बंद-स्रोत कोडबेस से एक संकीर्ण-लपेटा हुआ अनुप्रयोग बना रहे हैं, तो JARs को पुन: पैकेज करना ठीक है, यह सामान्य रूप से अवांछित है, और संभावित रूप से कुछ ओपन-सोर्स लाइसेंसों के साथ समस्याग्रस्त है। निश्चित रूप से आप वसंत के साथ ऐसा नहीं करना चाहते हैं।
सिद्धांत रूप में, कोई मदद करने के लिए एक उपकरण लिख सकता है। अभ्यास में, उपकरण को (उदाहरण के लिए) एनोटेशन, एक्सएमएल और उच्च आदेश कॉन्फ़िगरेशन से रनटाइम पर बनाए गए बीन डिस्क्रिप्टर से स्प्रिंग कॉन्फ़िगरेशन से गतिशील वर्ग निर्भरताओं को निकालने की आवश्यकता होगी (स्प्रिंगसेक्चर उदाहरण के लिए ऐसा करता है)। यह एक बड़ा सवाल है। और फिर भी आपको समस्या है कि इंस्टॉलेशन प्लेटफॉर्म पर किए गए वाइरिंग में "छोटा" परिवर्तन जार छंटनी प्रक्रिया द्वारा छोड़े गए जारों के कारण विफल हो सकता है।
मेरी नजर में, और अधिक व्यावहारिक विकल्प हैं:
- आप Maven/आइवी उपयोग करते हैं, अपने निर्भरता प्रबंधन करने के लिए, निर्भरता रेखांकन को देखो कि अब जरूरत प्रतीत निर्भरता को निकाल देते हैं ... और परीक्षण, परीक्षण, परीक्षण।
- मैन्युअल रूप से जार को बाहर निकालें जो अप्रयुक्त दिखाई देता है ... और परीक्षण, परीक्षण, परीक्षण।
- इसके बारे में चिंता न करें। अप्रयुक्त जेएआर क्रॉफ्ट का एक मध्यम स्तर तैनाती और वेबएप स्टार्टअप समय के लिए एक या तीन जोड़ सकता है, लेकिन आम तौर पर इससे कोई फर्क नहीं पड़ता। (लेकिन अगर यह करता है ... ऊपर देखें।)
[प्रोगार्ड] (http://proguard.sourceforge.net) एक और उदाहरण है जो ऐसा कर सकता है (और अधिक)। – BalusC
@ बाल्लूसी - और निस्संदेह अन्य योग्य उदाहरण हैं। लेकिन दुर्भाग्य से, वे वास्तव में * इस * समस्या का समाधान नहीं करते हैं। –
मैं पहले अनुच्छेद का जिक्र कर रहा था :) इससे पहले कि आप व्यावहारिक विकल्पों को संपादित करें, जिसे मैं पूरी तरह से सहमत हूं (+1)। – BalusC
यही कारण है कि कुछ पुरानी जावा परियोजनाओं में 10,000 जार आवेदन के लिए 600 जार और 200 एमबी युद्ध फ़ाइल है। यदि आप इसे सावधानीपूर्वक प्रबंधित नहीं करते हैं तो दर्द का प्रकार ...
आपको वास्तव में ढांचा प्रदाता से पूछना चाहिए या दस्तावेज़ीकरण पढ़ना चाहिए। कुछ जारों (गतिशील लोडिंग) में पर्याप्त रूप से पर्याप्त जार की आवश्यकता नहीं है और कभी-कभी आप बहुत अधिक जारों के साथ समाप्त हो सकते हैं।
मैंने एक बार "यूटिलिटी" लाइब्रेरी के लिए कुछ एफटीपी सहायक सामग्री की। यह कुछ apache ftp जार पर निर्भर था। यदि आपने लाइब्रेरी में एफटीपी फीचर्स का कभी भी उपयोग नहीं किया है तो आपको एफटीपी जार की आवश्यकता नहीं होगी लेकिन कोड के सांख्यिकीय विश्लेषण में कहा जा सकता है कि आपको इसकी आवश्यकता है। यह कुछ है जो आपको दस्तावेज करना चाहिए।
- 1. यह निर्धारित करना कि stringByEvaluatingJavaScriptFromString
- 2. यह निर्धारित करना कि छवि
- 3. यह निर्धारित करना कि CFTypeRef क्या है?
- 4. उपकरण यह निर्धारित करने के लिए कि पायथन के निम्नतम संस्करण की आवश्यकता है?
- 5. एप्लेट क्लाइंट के लिए न्यूनतम नेटटी जार
- 6. यह निर्धारित करने के लिए कि कोई दिनांक किसी अन्य
- 7. यह निर्धारित करना कि किसी वर्ग का संदर्भ सी #
- 8. यह निर्धारित करने के लिए कि कोई पथ किसी अन्य की उपनिर्देशिका है या नहीं?
- 9. मुझे zsh के न्यूनतम संस्करण की आवश्यकता कैसे है?
- 10. यह निर्धारित करना कि Google मानचित्र
- 11. यह निर्धारित करना कि तारों की एक सरणी में रूबी
- 12. यह निर्धारित करना कि पाइथन प्रक्रिया के लिए stdout
- 13. यह निर्धारित करने के लिए प्रतिबिंब का उपयोग करना कि किसी ऑब्जेक्ट को GUI थ्रेड
- 14. यह निर्धारित करना कि कोई फ़ोल्डर .NET
- 15. यह निर्धारित करना कि jQuery .ajax()
- 16. यह निर्धारित करें कि किसी तत्व के पास jQuery
- 17. यह निर्धारित करता है कि किसी सूची में अन्य सूचियां
- 18. यह निर्धारित करना कि लेजर पेज
- 19. यह निर्धारित करने के लिए कि किस स्क्रीन पर टास्कबार
- 20. आर पैकेज के न्यूनतम संस्करण की आवश्यकता
- 21. यह निर्धारित करना कि आर प्रोग्रामिंग भाषा
- 22. यह निर्धारित करना कि क्या ASP.Net ठीक से पंजीकृत है
- 23. यह निर्धारित करना कि वस्तु संपत्ति खाली है
- 24. यह निर्धारित करने के लिए कि क्या NSString खाली है
- 25. यह निर्धारित करना कि फ़ाइल एक डुप्लिकेट है
- 26. यह निर्धारित करना कि कैसंड्रा क्लस्टर कितना भरा है
- 27. यह निर्धारित करना कि माउस की स्थिति ब्राउज़र के किनारों के पास है
- 28. यह निर्धारित करने के लिए कि क्या एक डीएलएल को पूर्ण .NET 4 की आवश्यकता है या सिर्फ ग्राहक प्रोफ़ाइल
- 29. यह निर्धारित करें कि UIScrollView
- 30. विंडोज़: यह निर्धारित करने के लिए कि किसी फ़ाइल को किसी दिए गए दिनांक
परीक्षण, परीक्षण, परीक्षण। लेकिन आमतौर पर अगर ढांचे का कहना है कि इसे सभी जार की जरूरत है, तो आप बेहतर सभी जार प्रदान करते हैं, अन्यथा आप स्वयं ही हैं। –
एक उदाहरण वसंत है। लगभग सभी तृतीय पक्ष निर्भरताओं को मेवेन पीओएम में वैकल्पिक के रूप में चिह्नित किया जाता है। मैं मानता हूं कि परीक्षण इसके लिए "कैच-ऑल" है, लेकिन यह एक अच्छा सवाल है - मैंने अक्सर रनटाइम पर जानने के लिए कामना की है जो वास्तव में पुस्तकालयों का उपयोग किया जाता है। मैंने जावा अगली-टाइम-टाइम नेटिव कंपाइलर का उपयोग किया है - इसने उपयोग की जाने वाली सभी कक्षाओं और जारों को रिकॉर्ड किया है। आप कस्टम क्लास लोडर के समान कुछ अनुकरण कर सकते हैं जो कक्षाओं को ट्रैक करता है और स्थान निर्धारित करने के लिए Class.getResource() का उपयोग करता है। – mdma