Как установить длинный путь Java classpath в 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 как аргумент
java "). Он всегда сводится к тому, что консоль бросает руки с этой
ошибкой:

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

```

Это тест JUnit, тестирующий довольно большой существующий
унаследованный проект, поэтому никаких предложений о
перераспределении моей структуры каталогов на что-то более
разумное, эти типы решений пока отсутствуют. Я просто пытался
развернуть быстрый тест против этого проекта и запустить его в
командной строке, а консоль обгоняет меня. Помогите!

Командная строка Windows очень ограничена в этом отношении.
Обходной путь заключается в создании «дорожной банки». Это jar,
содержащий только файл `Manifest.mf` , чей
`Class-Path` указывает пути диска вашего длинного списка
баннеров и т. Д. Теперь просто добавьте этот *pathing jar* в
ваш путь к командной строке. Это обычно более удобно, чем упаковка
фактических ресурсов вместе.

Как я помню, пути к диску могут относиться к самому *pathing
jar* . Таким образом, `Manifest.mf` может выглядеть
примерно так:

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

```

Если ваш *pathing jar* содержит в основном основные
ресурсы, он не будет меняться слишком часто, но вы, вероятно, все
же захотите его сгенерировать где-нибудь в своей сборке.
Например:

```

  
    
  

```



Начиная с Java 6 вы можете использовать [подстановочные знаки classpath
</а>.](https://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html#Understanding)

[Example: `foo/*`, refers to all .jar files in the
directory `foo`](https://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html#Understanding)

[* это не будет соответствовать файлам классов (только файлы jar).
Для сопоставления используются: `foo; foo/*` или
`foo/*; foo` . Порядок определяет, что загружено
первым.
* Поиск не рекурсивно](https://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html#Understanding)


*(я полагаю, вы действительно не имеете в виду DOS, но
обратитесь к cmd.exe.)*

Я думаю, что это ограничение CLASSPATH меньше, чем ограничение
размера среды/среды. В XP отдельные переменные среды могут быть
размером 8k, вся среда ограничена 64k. Я не вижу, чтобы ты ударил
этот предел.

Существует предел для окон, который ограничивает длину командной
строки, в WindowsNT + это 8k для cmd.exe. Эта команда ограничена.
Может быть, у вас есть более чем 8 тысяч каталогов в вашей команде?
Возможно, вам повезло, даже если вы разделите их на [Ник Берарди](https://stackoverflow.com/questions/201816/how-to-set-a-long-java-classpath-in-msdoswindows%20#%20201857) .



Вы пытались уложить их?

```
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%

```



If I were in your shoes, I would download the junction utility
from MS : [http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx](https://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` .



Как упоминает HuibertGill, я бы обернул это в скрипт сборки Ant
так, чтобы вам не пришлось самостоятельно управлять всем этим.



Я думаю, что ты за рулем без весла здесь. Командная строка имеет
предел для аргументов для вызова программы.

У меня есть 2 sugestion, вы можете попробовать. Во-первых, перед
запуском тестов junit вы можете позволить скрипту/ant\_task
создавать JAR-классы различных классов в пути к классам. Затем вы
можете поместить JAR на путь класса, который должен быть
короче.

Другой способ, которым вы могли попробовать, - создать антскрипт
для запуска JUNIT, в ANT не должно быть такого предела для записей
pathpath.



Вы можете попробовать это

---

```
@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, установленные только для текущего сеанса командной строки



Не было никакого решения проблемы, кроме как каким-то образом
сделать classpath короче, переместив файлы jar в папку типа «C: \
jars».