2010-05-08 5 views
5

आप कैसे निर्धारित करते हैं कि ढांचे की ऐसी और ऐसी सुविधा के लिए जार की आवश्यकता है? उदाहरण के लिए, केवल निर्भरता इंजेक्शन का समर्थन करने के लिए वसंत के लिए उपलब्ध सभी लोगों में से कौन से जार की आवश्यकता होगी?यह निर्धारित करना कि किसी सुविधा के लिए न्यूनतम जार की आवश्यकता है

+3

परीक्षण, परीक्षण, परीक्षण। लेकिन आमतौर पर अगर ढांचे का कहना है कि इसे सभी जार की जरूरत है, तो आप बेहतर सभी जार प्रदान करते हैं, अन्यथा आप स्वयं ही हैं। –

+1

एक उदाहरण वसंत है। लगभग सभी तृतीय पक्ष निर्भरताओं को मेवेन पीओएम में वैकल्पिक के रूप में चिह्नित किया जाता है। मैं मानता हूं कि परीक्षण इसके लिए "कैच-ऑल" है, लेकिन यह एक अच्छा सवाल है - मैंने अक्सर रनटाइम पर जानने के लिए कामना की है जो वास्तव में पुस्तकालयों का उपयोग किया जाता है। मैंने जावा अगली-टाइम-टाइम नेटिव कंपाइलर का उपयोग किया है - इसने उपयोग की जाने वाली सभी कक्षाओं और जारों को रिकॉर्ड किया है। आप कस्टम क्लास लोडर के समान कुछ अनुकरण कर सकते हैं जो कक्षाओं को ट्रैक करता है और स्थान निर्धारित करने के लिए Class.getResource() का उपयोग करता है। – mdma

उत्तर

4

ऐसे उपकरण हैं जो कम से कम जेएआर बनाते हैं, यह पता लगाकर कि वास्तव में कोड का विश्लेषण करके किसी वर्ग में कौन से वर्गों का उपयोग किया जाता है, फिर केवल एक नया जार बनाते हैं उन वर्गों। (। मैं Zelix Classmaster का उपयोग कर याद करते हैं यह करने के लिए है, लेकिन कई विकल्प हैं)

समस्या स्प्रिंग की तरह एक डि ढांचे के लिए इन उपकरणों का उपयोग के साथ शामिल हैं:

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

  • मौजूदा उपकरण जेएआर का उपयोग नहीं करते हैं, यह नहीं बताते कि कौन सी इनपुट जेएआर का उपयोग नहीं किया जाता है। जब आप एक बंद-स्रोत कोडबेस से एक संकीर्ण-लपेटा हुआ अनुप्रयोग बना रहे हैं, तो JARs को पुन: पैकेज करना ठीक है, यह सामान्य रूप से अवांछित है, और संभावित रूप से कुछ ओपन-सोर्स लाइसेंसों के साथ समस्याग्रस्त है। निश्चित रूप से आप वसंत के साथ ऐसा नहीं करना चाहते हैं।

सिद्धांत रूप में, कोई मदद करने के लिए एक उपकरण लिख सकता है। अभ्यास में, उपकरण को (उदाहरण के लिए) एनोटेशन, एक्सएमएल और उच्च आदेश कॉन्फ़िगरेशन से रनटाइम पर बनाए गए बीन डिस्क्रिप्टर से स्प्रिंग कॉन्फ़िगरेशन से गतिशील वर्ग निर्भरताओं को निकालने की आवश्यकता होगी (स्प्रिंगसेक्चर उदाहरण के लिए ऐसा करता है)। यह एक बड़ा सवाल है। और फिर भी आपको समस्या है कि इंस्टॉलेशन प्लेटफॉर्म पर किए गए वाइरिंग में "छोटा" परिवर्तन जार छंटनी प्रक्रिया द्वारा छोड़े गए जारों के कारण विफल हो सकता है।

मेरी नजर में, और अधिक व्यावहारिक विकल्प हैं:

  • आप Maven/आइवी उपयोग करते हैं, अपने निर्भरता प्रबंधन करने के लिए, निर्भरता रेखांकन को देखो कि अब जरूरत प्रतीत निर्भरता को निकाल देते हैं ... और परीक्षण, परीक्षण, परीक्षण।
  • मैन्युअल रूप से जार को बाहर निकालें जो अप्रयुक्त दिखाई देता है ... और परीक्षण, परीक्षण, परीक्षण।
  • इसके बारे में चिंता न करें। अप्रयुक्त जेएआर क्रॉफ्ट का एक मध्यम स्तर तैनाती और वेबएप स्टार्टअप समय के लिए एक या तीन जोड़ सकता है, लेकिन आम तौर पर इससे कोई फर्क नहीं पड़ता। (लेकिन अगर यह करता है ... ऊपर देखें।)
+1

[प्रोगार्ड] (http://proguard.sourceforge.net) एक और उदाहरण है जो ऐसा कर सकता है (और अधिक)। – BalusC

+0

@ बाल्लूसी - और निस्संदेह अन्य योग्य उदाहरण हैं। लेकिन दुर्भाग्य से, वे वास्तव में * इस * समस्या का समाधान नहीं करते हैं। –

+0

मैं पहले अनुच्छेद का जिक्र कर रहा था :) इससे पहले कि आप व्यावहारिक विकल्पों को संपादित करें, जिसे मैं पूरी तरह से सहमत हूं (+1)। – BalusC

1

यही कारण है कि कुछ पुरानी जावा परियोजनाओं में 10,000 जार आवेदन के लिए 600 जार और 200 एमबी युद्ध फ़ाइल है। यदि आप इसे सावधानीपूर्वक प्रबंधित नहीं करते हैं तो दर्द का प्रकार ...

0

आपको वास्तव में ढांचा प्रदाता से पूछना चाहिए या दस्तावेज़ीकरण पढ़ना चाहिए। कुछ जारों (गतिशील लोडिंग) में पर्याप्त रूप से पर्याप्त जार की आवश्यकता नहीं है और कभी-कभी आप बहुत अधिक जारों के साथ समाप्त हो सकते हैं।

मैंने एक बार "यूटिलिटी" लाइब्रेरी के लिए कुछ एफटीपी सहायक सामग्री की। यह कुछ apache ftp जार पर निर्भर था। यदि आपने लाइब्रेरी में एफटीपी फीचर्स का कभी भी उपयोग नहीं किया है तो आपको एफटीपी जार की आवश्यकता नहीं होगी लेकिन कोड के सांख्यिकीय विश्लेषण में कहा जा सकता है कि आपको इसकी आवश्यकता है। यह कुछ है जो आपको दस्तावेज करना चाहिए।

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