विंडोज़ में एक लंबा जावा क्लासपाथ कैसे सेट करें?

मैं एक विंडोज़ एक्सपी कमांड लाइन पर हाथ से एक विशेष जुनीट परीक्षण चलाने की कोशिश कर रहा हूं, जिसमें क्लास पथ में असामान्य रूप से उच्च संख्या में तत्व हैं। मैंने कई बदलावों की कोशिश की है, जैसे कि:

set CLASS_PATH=C:\path\a\b\c;C:\path\e\f\g;....
set CLASS_PATH=%CLASS_PATH%;C:\path2\a\b\c;C:\path2\e\f\g;....
...
C:\apps\jdk1.6.0_07\bin\java.exe -client oracle.jdevimpl.junit.runner.TestRunner com.myco.myClass.MyTest testMethod

(अन्य बदलाव क्लासपाथ को एक पंक्ति पर सेट कर रहे हैं, क्लासपाथ के माध्यम से क्लासपाथ को जावा के लिए तर्क के रूप में सेट कर रहे हैं ")। यह हमेशा इस त्रुटि के साथ अपने हाथों को फेंकने वाले कंसोल पर आता है:

The input line is too long.
The syntax of the command is incorrect.

यह एक जुनीट परीक्षण परीक्षण है जो एक बड़ी मौजूदा विरासत परियोजना है, इसलिए मेरी निर्देशिका संरचना को पुन: व्यवस्थित करने के बारे में कोई सुझाव कुछ और उचित नहीं है, ऐसे समाधान समाधान अभी के लिए बाहर हैं। मैं बस इस परियोजना के खिलाफ एक त्वरित परीक्षण करने की कोशिश कर रहा था और इसे कमांड लाइन पर चला रहा था, और कंसोल मुझे पत्थर मार रहा है। मदद!

34

9 उत्तर

Windows कमांड लाइन इस संबंध में बहुत सीमित है। एक "पथिंग जार" बनाने के लिए एक कामकाज है। यह एक जार है जिसमें केवल एक Manifest.mf फ़ाइल है, जिसका क्लास-पथ जार की आपकी लंबी सूची के डिस्क पथ निर्दिष्ट करता है। अब यह पथिंग जार अपने कमांड लाइन क्लासपाथ पर। यह आम तौर पर वास्तविक संसाधनों को पैकेजिंग से अधिक सुविधाजनक है।

जैसा कि मुझे याद है, डिस्क पथ पथिंग जार से संबंधित हो सकते हैं। तो Manifest.mf ऐसा कुछ दिख सकता है:

Class-Path: this.jar that.jar ../lib/other.jar

यदि आपका पथिंग जार मुख्य रूप से आधारभूत संसाधन है, तो यह बहुत बार नहीं बदलेगा, लेकिन आप शायद इसे अपने निर्माण में कहीं भी उत्पन्न करना चाहते हैं। उदाहरण के लिए:


  
    
  

49
जोड़ा
क्या मुझे कुछ भी करने की ज़रूरत है, उदाहरण के लिए यह जार लोड हो गया है? या क्या JVM इस तरह के प्रकटताओं के लिए कक्षा पथ पर प्रदान किए गए सभी जार स्कैन करेगा? साथ ही, क्या यह JVMs में पोर्टेबल है? जावा का न्यूनतम संस्करण क्या है जो इसका समर्थन करता है?
जोड़ा लेखक bacar, स्रोत
संस्करण 1.7 के बाद से एंटी में उपलब्ध ManifestClassPath कार्य का उपयोग एंट पथ से क्लास-पथ विशेषता के लिए उपयुक्त गुण उत्पन्न करने के लिए किया जा सकता है।
जोड़ा लेखक Matt Hurne, स्रोत
मैंने यह कोशिश की, लेकिन Manifest.mf अन्य संबंधित JARs और निर्देशिकाओं के लिए केवल संबंधित URL की अनुमति देता है।
जोड़ा लेखक xamde, स्रोत
18
जोड़ा
यह "लिंक केवल उत्तर" जैसा लगता है। आपको इसके बारे में और जानकारी देना चाहिए कि इसके बारे में कैसे जाना है।
जोड़ा लेखक rghome, स्रोत
हे, यह अच्छा है - मुझे इसके बारे में पता नहीं था। यह निश्चित रूप से एक सहायक विकल्प है, खासकर अगर (हमारे मामले में), क्लासपाथ जार से भरा है, जिनमें से कई एक ही निर्देशिका में हैं।
जोड़ा लेखक Ogre Psalm33, स्रोत
यह जावा 6 में नया प्रतीत होता है।
जोड़ा लेखक Chris Noe, स्रोत
लेकिन यह रिकर्सिव ट्रैवर्सिंग प्रदान नहीं करता है।
जोड़ा लेखक Snehal Masne, स्रोत

(मुझे लगता है कि आप वास्तव में डॉस का मतलब नहीं है, लेकिन cmd.exe का संदर्भ लें।)

मुझे लगता है कि यह एक पर्यावरण आकार/पर्यावरण परिवर्तनीय आकार सीमा से एक क्लासस्पैट सीमा कम है। एक्सपी पर, व्यक्तिगत पर्यावरण चर आकार में 8k हो सकते हैं, पूरा वातावरण 64k तक सीमित है। मैं नहीं देख सकता कि आप उस सीमा को मार देंगे।

विंडोज़ पर एक सीमा है जो कमांड लाइन की लंबाई को प्रतिबंधित करती है, विंडोजएनटी + पर cmd.exe के लिए यह 8k है। एक सेट कमांड उस प्रतिबंध के अधीन है। क्या आपके सेट कमांड में 8k से अधिक निर्देशिकाएं हो सकती हैं? आप भाग्य से बाहर हो सकते हैं, फिर भी - यदि आप उन्हें निक बर्र्डी ने सुझाव दिया।

4
जोड़ा
वूप्स, हाँ, पुराना स्कूल घूम रहा है। हाँ, cmd.exe।
जोड़ा लेखक Ogre Psalm33, स्रोत

क्या आपने उन्हें ढेर करने की कोशिश की है?

set CLASS_PATH = c:\path
set ALT_A = %CLASS_PATH%\a\b\c;
set ALT_B = %CLASS_PATH%\e\f\g;
...

set ALL_PATHS = %CLASS_PATH%;%ALT_A%;%ALT_B%
2
जोड़ा
हमने इसका कोई फायदा नहीं उठाया, इसके कुछ बदलाव किए। सीएमडी उन सभी% ALT_A%, इत्यादि को प्रतिस्थापित करता है और अंतिम पथ हवाओं को संभालने के लिए बहुत लंबा होता है, जिससे मुझे एक ही त्रुटि मिलती है।
जोड़ा लेखक Ogre Psalm33, स्रोत

If I were in your shoes, I would download the junction utility from MS : http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx and then map your "C:\path" to say, "z:\" and "c:\path2" to say, "y:\". This way, you will be reducing 4 characters per item in your classpath.

set CLASS_PATH=C:\path\a\b\c;C:\path\e\f\g;
set CLASS_PATH=%CLASS_PATH%;C:\path2\a\b\c;C:\path2\e\f\g;

Now, your classpath will be :

set CLASS_PATH=z\a\b\c;z\e\f\g;
set CLASS_PATH=%CLASS_PATH%;y:\a\b\c;y:\e\f\g;

यह आपके वास्तविक classpath के आधार पर और अधिक कर सकता है।

1
जोड़ा
एनटीएफएस में इसके लिए जंक्शन एक फ्रंट एंड है। mklink/D दूसरा है, विंडोज के बाद के संस्करणों में पहले से मौजूद हो सकता है।
जोड़ा लेखक mgaert, स्रोत
विंडोज 7 पर mlink शामिल नहीं प्रतीत होता है। जंक्शन विंडोज 7 (उद्यम) के हिस्से के रूप में शामिल किया गया है।
जोड़ा लेखक anjanb, स्रोत

जैसा कि ह्यूबर्ट गिल का उल्लेख है, मैं इसे एंट बिल्ड स्क्रिप्ट में लपेटूंगा ताकि आपको यह सब प्रबंधित न कर सकें।

0
जोड़ा

मुझे लगता है कि आप यहाँ एक पैडल के बिना क्रीक ऊपर हैं। प्रोग्रामलाइन को कॉल करने के लिए कमांडलाइन के तर्कों की सीमा है।

मेरे पास 2 परेशानी है जो आप कोशिश कर सकते हैं। सबसे पहले, जूनिट परीक्षण चलाने से पहले, आप स्क्रिप्ट/ant_task क्लासपाथ पर विभिन्न कक्षाओं के जेएआर बना सकते हैं। फिर आप जेएआर को क्लासपाथ पर डाल सकते हैं, जो कम होना चाहिए।

एक और तरीका जिसे आप कोशिश कर सकते हैं, जूनिट चलाने के लिए एक एंटीस्क्रिप्ट बनाना है, एएनटी में क्लासपाथ प्रविष्टियों के लिए ऐसी सीमा नहीं होनी चाहिए।

0
जोड़ा

आप इसे आजमा सकते हैं


@echo off
set A=D:\jdk1.6.0_23\bin
set B=C:\Documents and Settings\674205\Desktop\JavaProj
set PATH="%PATH%;%A%;"
set CLASSPATH="%CLASSPATH%;%B%;"

कमांड प्रॉम्प्ट पर जाएं और इसे दो बार चलाएं (कोई विचार नहीं .... मुझे विंडोज एक्सपी मशीन पर ऐसा करना है) पथ केवल वर्तमान कमांड प्रॉम्प्ट सत्र के लिए सेट किया गया है

0
जोड़ा

जार फ़ाइलों को "सी: \ जार" जैसे फ़ोल्डर में स्थानांतरित करके क्लासपाथ को कम करने के अलावा किसी अन्य मुद्दे के अलावा इस मुद्दे का कोई समाधान नहीं था।

0
जोड़ा
गलत। एक और समाधान था, लेकिन आप या तो नहीं जानते थे कि यह क्या था, या आपने इसका उपयोग न करने का फैसला किया। हालांकि, आपने जो किया वह निश्चित रूप से एक समाधान था ... जो कुछ परिस्थितियों में काम कर सकता है।
जोड़ा लेखक Stephen C, स्रोत