2012-02-08 21 views
15

मैं विंडोज़ पर जावा 7 के लिए वाइल्डकार्ड विस्तार व्यवहार का एक अजीब व्यवहार देखता हूं।विंडोज़ पर जावा 7 कमांडलाइन के लिए टूटा वाइल्डकार्ड विस्तार (7?)

सदियों से "*" बनाम * के बीच एक साफ अंतर था।
ऐसा लगता है कि यह जावा 7 (कम से कम विंडोज 7 पर) के लिए सही नहीं है।

wildcard classpath का उपयोग करते समय मैंने समस्या देखी।
वाइल्डकार्ड-क्लासपाथ उद्धृत करने के बावजूद यह विस्तारित हो जाता है।
इस प्रकार जावा एप्लिकेशन में वाइल्डकार्ड पास करने के लिए ऐसा संभव नहीं लगता है।

तो java -cp "somewhere/*" का उपयोग विफल हो जाएगा (जैसा कि "somewhere\*" है)।

एक वर्कअराउंड लगता है: java -cp "somewhere/*;" जो विस्तार को रोकता है।

व्यवहार को सत्यापित करने के लिए मैंने एक छोटी ईको.जावा कक्षा लिखी।

मैंने पाया कि जावा 1.6.0 उद्धृत "*" और सादा * अपेक्षित काम करता है, जबकि जावा 7 पर मुझे हमेशा विस्तारित वाइल्डकार्ड मिला। अब तक यह विंडोज 7 पर देखा गया था, पता नहीं एक्सपी पर क्या होता है।

समस्या उत्पन्न होती है, क्योंकि विंडोज़ पर वाइल्डकार्ड कभी भी अंधेरे युग सीएमडी.एक्सईई (जैसे यूनिक्स पर कोई भी खोल नहीं करता) द्वारा कभी विस्तार नहीं किया जाता है। इसके बजाय प्रत्येक निष्पादन योग्य को setargv.obj का उपयोग करके इसे स्पष्ट रूप से करना है।

इस किसी और के द्वारा मनाया जाता है:

मैं दो संबंधित मुद्दों जो एक समान समस्या का वर्णन करने लगते हैं पाया?
या क्या इसे नियंत्रित करने के लिए कुछ अस्पष्ट विंडोज या बैच-फ़ाइल सेटिंग्स हैं?

आहार।

+1

यदि आप पर्यावरण चर '_JAVA_LAUNCHER_DEBUG' लॉन्चर सेट करते हैं तो क्लासपाथ का विस्तार करने के बारे में अतिरिक्त जानकारी दिखाई देगी। शायद यह समझने में मदद करेगा कि java.exe के अंदर क्या हो रहा है। – Mersenne

+0

यह एक संबंधित है http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7020954 –

+0

'_JAVA_LAUNCHER_DEBUG' का उपयोग करके यह भी दिखाता है कि' "*" 'decays: जावा-सीपी। इको "*" कमांड लाइन तर्क: argv [0] = सी: \ प्रोग्राम फ़ाइलें \ जावा \ jdk1.7 \ bin \ java.exe argv [1] = -cp argv [2] =। argv [3] = इको argv [4] = Echo.class argv [5] = Echo.java – Ditz

उत्तर

7

हां, मैंने एक ही समस्या देखी।

  • इसे the release notes for Java7 update 4 में 'ज्ञात समस्या' के रूप में समझाया गया है।

  • Here is the bug report। फिक्स जावा 7 अपडेट 8 में वितरित किया जाएगा (वर्तमान रिलीज अपडेट 6 है)।

  • ध्यान दें कि शेल-विकल्प वर्कअराउंड नहीं है, क्योंकि विंडोज़ में, शेल वाइल्डकार्ड विस्तार को संभाल नहीं पाता है। (जबकि यूनिक्स में, खोल विस्तार करता है)।

0

टूटी हुई/* समस्या का सीधा समाधान नहीं है, लेकिन मुझे उम्मीद है कि आप अपनी स्थिति को कम करने के लिए निम्न स्क्रिप्ट का उपयोग कर सकते हैं।

libDir2Scan4jars="../test";cp=""; for j in `ls ${libDir2Scan4jars}/*.jar`; do if [ "$j" != "" ]; then cp=$cp:$j; fi; done; echo $cp| cut -c2-${#cp} > .tmpCP.tmp; export tmpCLASSPATH=`cat .tmpCP.tmp`; if [ "$tmpCLASSPATH" != "" ]; then echo .; echo "classpath set, you can now use ~>   java -cp \$tmpCLASSPATH"; echo .; else echo .; echo "Error please check libDir2Scan4jars path"; echo .; fi; 

लिनक्स के लिए लिखित, विंडोज़ के लिए भी एक समान हो सकता है।यदि "libDir2Scan4jars" में इनपुट के रूप में उचित निर्देशिका प्रदान की जाती है; लिपि सभी जार स्कैन करेगी और क्लासपाथ स्ट्रिंग बनाएगी और इसे एक एनवी वैरिएबल "tmpCLASSPATH" में निर्यात करेगी।