2011-01-21 12 views
7

मुझे कार्यक्रम के निष्पादन के दौरान अतिरिक्त जारों का उपयोग करने की आवश्यकता है। मैं मैन्युअल रूप से सापेक्ष ./lib फ़ोल्डर में जार जोड़ता हूं और फिर प्रोग्राम निष्पादित करता हूं। मैनिफेस्ट फ़ाइल में क्लासपाथ को कैसे परिभाषित करना चाहिए?जावा मेनिफेस्ट क्लासपाथ में नियमित अभिव्यक्ति का उपयोग कैसे करें?

+0

मुझे समाधान मिला! मैं चर शामिल करूंगा जैसे: कक्षा-पथ: lib/externaljar1.jar lib/externaljar2.jar आदि 5 या 10 मान तक। फिर रनटाइम के दौरान जार समेत, बीमार बस इसे बाहरीjar1, externaljar2 आदि के रूप में नाम दें और इसे lib फ़ोल्डर में कॉपी करें। ;-) – Suraj

+0

मैं हर 1 धन्यवाद करता हूं जिन्होंने मेरी क्वेरी का जवाब दिया। आपका बहुत बहुत धन्यवाद! – Suraj

उत्तर

11

आप अपने अभिव्यक्ति के Class-Path विशेषता में नियमित अभिव्यक्तियों या अन्य वाइल्डकार्ड का उपयोग नहीं कर सकते हैं।

वहाँ जावा में केवल एक ही समर्थित वाइल्डकार्ड है, और कहा कि केवल अगर एक "मैन्युअल" java मंगलाचरण पर कमांडलाइन पर निर्दिष्ट (अर्थात -jar का उपयोग नहीं) पर काम करता है: using directoryname/*

+0

क्या सीसी कमांड या क्लासलोडर फ़ंक्शन का उपयोग करने के अलावा कोई अन्य दृष्टिकोण है? – Suraj

+0

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

+0

इसके बारे में क्षमा करें! असल में मैं उपयोगकर्ता के अनुकूल दृष्टिकोण के लिए कोड प्रोग्रामिंग कर रहा हूं और निष्पादन योग्य जार में इसे तैनात कर रहा हूं। यह एक सामान्य डेटाबेस है जहां उपयोगकर्ता अपना डेटाबेस चुन सकता है। इस प्रकार उसे कनेक्टिविटी जार को निर्दिष्ट करने की आवश्यकता होती है और उसे प्रोग्राम सुलभ फ़ोल्डर में डाल दिया जाता है। मैंने सोचा कि क्या मैं मैनिफेस्ट क्लासपाथ में lib/* या lib/*। Jar जैसे नियमित अभिव्यक्ति का उपयोग कर सकता हूं ताकि जब प्रोग्राम निष्पादित हो जाए तो यह सभी जार पाता है। – Suraj

2

मैं सभी क्या आप वास्तव में चाहते हैं के बारे में भी यकीन नहीं है, लेकिन आप रनटाइम के दौरान जार जोड़ सकते हैं:

  • सूची (जार) निर्देशिका जार युक्त पर File.list() का उपयोग करके फ़ाइलें
  • फ़ाइल नाम पर एक regex आप पुनः प्राप्त
  • मुख्य classloader को जार

मैं (यदि आवश्यक हो) वास्तव में कैसे रजिस्टर करने के लिए पता नहीं है URLClassLoaders लोड करने के लिए एक URLClassLoader उपयोग करते हैं। लेकिन जिस तरह से मुझे लगता है कि मैं जाऊंगा।

+2

आप spec के भीतर बूटस्ट्रैप क्लासलोडर को संशोधित नहीं कर सकते हैं (वहां 'बदसूरत हैक' हैं जो 'addURL() 'का उपयोग करके कर सकते हैं। Spec-conforming समाधान केवल बूस्टरपैपिंग क्लास को अपने जार में रखना होगा, अन्य सभी जार ("असली" मुख्य जार समेत) को खोजने के लिए और उन सभी को एक क्लासलोडर में लोड करना होगा। फिर असली मुख्य विधि से वास्तविक मुख्य विधि को कॉल करें। –

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