2009-04-06 9 views
6

पल अपने निर्माण की प्रक्रिया के अंतर्गत सभी आवश्यक जावा पुस्तकालयों के साथ युद्ध फ़ाइल repackaging वेब-INF/lib और फिर विकास/डेमो/उत्पादन सर्वर के लिए युद्ध फ़ाइल कॉपी करने के होते हैं पर बिल्ला द्वारा पुन: वितरित किया जाना है।युद्ध का आकार 41 एम है जब एक युद्ध के भीतर जावा lib के 40 एम की प्रतिलिपि से बचने के लिए कैसे?

पैक की गई युद्ध फ़ाइल का आकार लगभग 41 मीटर है और फिलहाल यह बाहरी जावा पुस्तकालयों की 40 एम की तरह कुछ है। कोई बेहतर तरीका ज़रूर होगा। आपने इस मुद्दे को कैसे हल किया है?

मेरे विकास मशीन अपने निर्माण उपकरण के रूप में मेरी आईडीई के रूप में ग्रहण और चींटी के साथ एक खिड़कियों बॉक्स है। सर्वर टॉमकैट 5.5 के साथ सभी लिनक्स बॉक्स हैं।

मैं शायद सर्वर साइड पर युद्ध पैकेज के लिए जार फ़ाइलों जोड़ना चाहिए?

उत्तर

17

मैं देख सकता हूं कि आप क्या कह रहे हैं, और हमारे कुछ वेबपैप्स के साथ भी निराशा हुई है, लेकिन स्थिरता के लिए, मैं सुझाव दूंगा कि आप चीजों को वैसे ही रखें। यदि पुस्तकालयों को टोमकैट/lib निर्देशिका में कॉपी करना है तो आप वेबपेज क्लासपाथ बनाम सिस्टम क्लासपाथ के साथ समस्याओं में भाग ले सकते हैं।

चीजों को रखने के द्वारा आप सुनिश्चित हैं कि आप उत्पादन में होने के समान विकास/डेमो में उसी सामान को तैनात कर रहे हैं। जब आप मैन्युअल रूप से उत्पादन में सामान बदल रहे होते हैं, तो जीवन बेकार हो जाता है, या आपके पास कुछ पागल त्रुटि होती है क्योंकि आप XYZ.jar को संस्करण 1.6 से 1.6.1_b33 में अपडेट करने के लिए भूल गए हैं और अब यह आपके विचार से भिन्न व्यवहार कर रहा है जो डेमो पर सटीक कोड है ।

देव/डेमो/उत्पादन प्रणालियों के लिए पर्याप्त महत्वपूर्ण कुछ के साथ काम करते समय, मुझे लगता है कि स्थिरता .war फ़ाइल आकार की तुलना में एक समस्या का अधिक है।

0

क्या आप सर्वर के पक्ष में जावा लाइब्रेरी पथ में गैर-बदलते जार जोड़ सकते हैं, और केवल अपने युद्ध में नियमित रूप से बदलते जार शामिल कर सकते हैं?

+0

वास्तव में एक वेबपैप के पुस्तकालयों के साथ पूरे सर्वर वातावरण को गड़बड़ करना नहीं चाहेगा। – kosoant

0

आप बिलाव/lib निर्देशिका में बाहरी जावा पुस्तकालयों शामिल हो सकते हैं। इस तरह वे सर्वर पर रहते हैं।

+0

बस सावधान रहें, इससे समस्या हो सकती है यदि एक ही सर्वर पर अन्य ऐप्स को एक ही lib के एक अलग संस्करण की आवश्यकता होती है, या ऐसे मुद्दे जहां कक्षा के एक उदाहरण को क्लासलोडर्स –

+1

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

+0

मैं मैट और रॉबिन के साथ इस पर हूं: वास्तव में पूरे वेब वातावरण को एक वेबपैप के पुस्तकालयों के साथ गड़बड़ करना नहीं चाहूंगा। – kosoant

0

आप केवल एक जेएआर फ़ाइल के रूप में तैनात कर सकते हैं, स्थानीय रूप से अपने परिनियोजन पर्यावरण को दोहरा सकते हैं और केवल बदले गए फाइलों और जार स्वयं की प्रतिलिपि बना सकते हैं। पथिंग एकमात्र असली मुद्दा है।

या आप एक कान की स्थापना पर विचार कर सकता है।

1

बिलाव एक shared/lib निर्देशिका है, जो वैश्विक आवेदन निर्भरता के लिए उचित जगह है। हालांकि, ये सभी अनुप्रयोगों के लिए दृश्यमान होंगे, जो निर्भरता प्रबंधन को प्रभावित करेंगे और स्थिर चर जैसे चीजों के परिणाम हो सकते हैं। मुझे यकीन नहीं है कि क्या आप टॉमकैट में कुछ भी बेहतर कॉन्फ़िगर कर सकते हैं।

एक वैकल्पिक एक और अधिक परिष्कृत वेब कंटेनर करने के लिए स्विच करने के लिए है। उदाहरण के लिए, वेबस्पेयर एप्लिकेशन सर्वर सामुदायिक संस्करण (Geronimo का नीला-धोया संस्करण) per-asset libraries का समर्थन करता है। अन्य मुफ्त और वाणिज्यिक सर्वर भी इसका समर्थन करते हैं। मुझे पता है WebSphere Application Server करता है और मुझे पूरा यकीन है कि आप इसे Glassfish में कर सकते हैं।

+0

अधिक उन्नत कंटेनर पर युक्तियों के लिए धन्यवाद। – kosoant

0

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

मैं जानता हूँ कि यह एक अजीब विन्यास है, लेकिन मैं नहीं समझ सकता कैसे लगातार अपने ठेठ आवेदन की 30MB repackaging (और बढ़ती) किसी भी बेहतर कर सकता है। एक दिन विकास वर्णनकर्ता पुस्तकालयों जो कंटेनर डाउनलोड करने और कैश कर सकते हैं करने के लिए बाहरी संदर्भ के लिए अनुमति दे सकता है। ??

कीजिए मेरी गरीब अंग्रेजी।

1

@McDowell, जब उन J2EE सर्वर का उल्लेख है, तो आप चाहिए सटीक वे J2EE सर्वर (सर्वलेट कंटेनर + बाकी) हैं।

@digitaljoel की तरह, मैं चीजों को रखने के लिए वे कर रहे हैं की तरह सुझाव देते हैं। ऐसा लगता है कि आपने अभी तक बहुत अधिक वेब एप्लिकेशन परिनियोजन नहीं किया है। आपके पास जो समस्याएं होंगी वे मूल्य (संस्करण विवाद, तैनाती त्रुटियां इत्यादि) के लायक नहीं हैं।

0

आप क्या जरूरत है एक संस्करण नियंत्रण उपकरण और निर्माण प्रक्रिया है।

उपयोग सीएसवी, SVN, GIT या जो भी आप नियंत्रण में अपने स्रोत रखने के लिए फिट। अपना आवेदन बनाने के लिए एक बिल्ड टूल का उपयोग करें: मेवेन, चींटी, ...

अब, जब आप अपने सर्वर पर अपना आवेदन तैनात करना चाहते हैं, तो आपको बस अपने कंप्यूटर पर अपने अपडेट करना होगा, अपना स्रोत अपडेट करें सर्वर, अपना एप्लिकेशन बनाएं और इसे सर्वर से तैनात करें।

इस तरह, सर्वर बस अपने संशोधनों लोड करने के लिए करना होगा और यह बहुत तेजी से होना चाहिए।

5

हम (हमारे मामले में, खिड़कियों के नीचे cygwin का प्रयोग करके) इस के लिए rsync उपकरण का उपयोग सर्वर (जो linux चलाने) के लिए तैनाती की प्रतिलिपि बनाने के। हम विस्फोटित WAR/EAR फ़ाइलों का उपयोग करते हैं (यानी MyApp.war नामक एक ज़िप फ़ाइल के बजाय MyApp.war नामक एक निर्देशिका संरचना), rsync केवल बदली गई फ़ाइलों को स्थानांतरित कर देगा।

सामान्य उपयोग में, rsync हमारे 30-40 मेगाबाइट के बारे में 5 सेकंड में कान विस्फोट स्थानांतरित करेंगे।

+0

+1 मैं मानता हूँ, मैं भी एक चींटी लक्ष्य के भीतर से भी ऐसा ही करने – stivlo

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