كيفية تعيين فئة Java طويلة في Windows؟

أحاول تشغيل اختبار JUnit معين يدويًا على سطر أوامر Windows XP ، والذي يحتوي على عدد كبير غير عادي من العناصر في مسار الفئة. لقد جربت العديد من الأشكال ، مثل:

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

(تنويعات أخرى تعيين مسار classpath بالكامل على سطر واحد ، وتعيين مسار classpath عبر -classpath كوسيطة للجافا "). وينتقل دومًا إلى وحدة التحكم التي ترفع يدها باستخدام هذا الخطأ:

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

هذا اختبار JUnit يختبر مشروع كبير حاليًا كبيرًا ، لذا لا توجد اقتراحات حول إعادة ترتيب بنية الدليل الخاصة بي إلى شيء أكثر معقولية ، فهذه الأنواع من الحلول موجودة الآن. كنت أحاول فقط إجراء اختبار سريع ضد هذا المشروع وتشغيله على سطر الأوامر ، والكونسولر يعيقني. مساعدة!

34

9 إجابة

سطر الأوامر ويندوز هو الحد جدا في هذا الصدد. الحل هو إنشاء "جرة مسار". هذه عبارة عن جرة تحتوي فقط على ملف Manifest.mf ، الذي يحدد Class-Path مسارات القرص الخاصة بقائمة الجرار الطويلة الخاصة بك ، وما إلى ذلك. الآن أضف فقط هذا جرة المسار إلى سطر الأوامر الخاص بك. هذا عادة ما يكون أكثر ملاءمة من تعبئة الموارد الفعلية معًا.

على ما أذكر ، يمكن أن تكون مسارات القرص نسبة إلى جرة المسار نفسها. لذلك قد يبدو Manifest.mf شيئًا كالتالي:

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

إذا كانت جرة المسار تحتوي على موارد أساسية بشكل أساسي ، فلن تتغير كثيرًا ، ولكن ربما ستظل ترغب في توليدها في مكان ما في البنية. فمثلا:


  
    
  

49
وأضاف
هل أحتاج إلى القيام بأي شيء ، على سبيل المثال التأكد من تحميل هذه الجرة؟ أو هل سيقوم JVM بمسح جميع الجرار المتوفرة على مسار الفصل لمثل هذه البيانات؟ أيضا ، هل هو محمول عبر JVMs؟ ما هو الحد الأدنى من إصدار Java الذي يدعم هذا؟
وأضاف المؤلف bacar, مصدر
يمكن استخدام المهمة ManifestClassPath المتوفرة في Ant منذ الإصدار 1.7 لإنشاء خاصية مناسبة للسمة Class Path من مسار Ant.
وأضاف المؤلف Matt Hurne, مصدر
لقد جربت ذلك ، لكن Manifest.mf لا تسمح إلا بعناوين URL النسبية إلى JARs والدلائل الأخرى.
وأضاف المؤلف xamde, مصدر
18
وأضاف
هذا يبدو وكأنه "رابط الاجابة فقط". يجب عليك تقديم المزيد من التفاصيل حول كيفية القيام بذلك.
وأضاف المؤلف rghome, مصدر
مهلا ، هذا رائع - لم أكن أعرف ذلك. هذا بالتأكيد خيار مفيد ، خاصة إذا كان (كما هو الحال في حالتنا) ، يمتلئ الصف من الجرار ، والعديد منها في نفس الدليل.
وأضاف المؤلف Ogre Psalm33, مصدر
يبدو هذا جديدًا في Java 6.
وأضاف المؤلف Chris Noe, مصدر
ولكن هذا لا يوفر العودية العبور.
وأضاف المؤلف Snehal Masne, مصدر

(أفترض أنك لا تقصد DOS حقًا ، ولكن الرجوع إلى cmd.exe.)

أعتقد أنه أقل من حد CLASSPATH من حد حجم متغير بيئة/بيئة. في XP ، يمكن أن تكون متغيرات البيئة الفردية 8 كيلو في الحجم ، وتقتصر البيئة بأكملها على 64 كيلو بايت. لا أستطيع أن أراك سوف تصل إلى هذا الحد.

يوجد حد على الإطارات التي تقيد طول سطر الأوامر ، على WindowsNT + هو 8 كيلو بايت لـ cmd.exe. أمر مجموعة يخضع لهذا القيد. هل يمكن أن يكون لديك أكثر من 8K قيمة الدلائل في الأمر set الخاص بك؟ قد تكون خارج الحظ ، حتى - إذا قمت بتقسيمهم مثل اقترح نيك بيراردي .

4
وأضاف
Woops ، نعم ، المدرسة القديمة تتسرب من خلال. نعم ، 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
وأضاف
حاولنا بعض الاختلافات من هذا ، ولكن دون جدوى. يبدو أن CMD تحل محل كل تلك 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
وأضاف
تقاطع واجهة واحدة لهذا في NTFS. mklink/D آخر ، قد يكون موجودًا بالفعل في الإصدارات الأحدث من Windows.
وأضاف المؤلف mgaert, مصدر
لا يبدو أن يتم تضمين mlink على ويندوز 7. يتم تضمين تقاطع كجزء من ويندوز 7 (المؤسسة).
وأضاف المؤلف anjanb, مصدر

كما يذكر HuibertGill ، سأقوم بتغليف هذا في نص برمجي Ant Ant فقط حتى لا تضطر إلى إدارة كل هذا بنفسك.

0
وأضاف

أعتقد أنك صعدت دون جدول تجديف هنا. لدى سطر الأوامر حدًا لوسيطات استدعاء برنامج.

لدي 2 sugestion يمكنك محاولة. أولاً ، قبل تشغيل اختبارات junit ، يمكنك السماح لبرنامج نصي/ant_task بإنشاء JARs من الطبقات المختلفة في مسار classpath. ثم يمكنك وضع JARs على مسار الصنف ، والذي يجب أن يكون أقصر.

هناك طريقة أخرى يمكنك تجربتها وهي إنشاء antscript لتشغيل JUNIT ، في ANT لا ينبغي أن يكون هناك حد لمدخلات classpath.

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%;"

الذهاب إلى موجه الأوامر وتشغيله مرتين (أي فكرة لماذا .... لا بد لي من القيام بذلك على جهاز Windows XP) كما تم تعيين المسارات r فقط لجلسة عمل موجه الأوامر الحالية

0
وأضاف

لم يكن هناك حل للمشكلة سوى جعل مسار classpath أقصر من خلال نقل ملفات jar إلى مجلد مثل "C: \ jars".

0
وأضاف
غير صحيح. كان هناك حل آخر ، لكنك لم تعرف ما هو ، أو قررت عدم استخدامه. ومع ذلك ، ما فعلته هو بالتأكيد حلاً ... يمكن أن يعمل في بعض الظروف.
وأضاف المؤلف Stephen C, مصدر