работает с Java.exe, если в имени каталога существует точка - PullRequest
3 голосов
/ 18 февраля 2010

Я пытаюсь запустить созданную Java-прогу, но хочу запустить ее из определенного каталога.При указании относительного пути к файлу класса, который я хочу запустить, этот путь содержит каталог с точкой в ​​нем, и он, кажется, отключает Java;Так, например, я пытаюсь выполнить:

java -classpath myPath/myPath-1.2.3/myLongPath myPath/myPath-1.2.3/myLongPath/myProg

Ошибки Java, говорящие о том, что он не может найти класс (NoClassDefFoundError);Это имеет смысл, потому что я вижу, что Java ищет в другом каталоге, чем тот, который я указал;Это выглядит в: myPath / myPath-1/2/3 / myLongPath вместо: myPath / myPath-1.2.3 / myLongPath

Как ни старайся, я не могу понять, как указать java.exeчто каталог, в котором я хочу его видеть, содержит точки.Я пытался \ избежать периодов, но это не помогает.Кто-нибудь сталкивался с этой проблемой раньше?Кстати, я работаю на Linux в терминале GNOME.Спасибо за любую помощь.

Ответы [ 2 ]

8 голосов
/ 18 февраля 2010

Последний параметр в вызове java - это имя класса для запуска.Это не имя файла, а имя класса.Он включает полное имя пакета (если класс не входит в пакет по умолчанию), разделенный точками (не косыми чертами).Ни имя класса, ни имя пакета не могут содержать точек.Папка, представляющая путь к пакету, не должна быть включена в каталоги, включенные в classpath (там должен быть только верхний каталог для папки класса).

В вашем случае это выглядит просто1003 *, но чтобы убедиться, каково имя класса (включая имя пакета) класса с методом main?

Пример:

Если у меня есть класс mypackage.mysubpackage.MainClass, ифайл класса находится в /home/me/project/1.3/build/mypackage/mysubpackage/MainClass.class, тогда команда для запуска класса будет java -cp /home/me/project/1.3/build mypackage.mysubpackage.MainClass.

0 голосов
/ 18 февраля 2010

Java использует точку в качестве разделителя компонентов пакета, поэтому она просто не может появляться в именах классов. Поскольку имена классов привязаны к структурам каталогов, они также не могут появляться в именах каталогов, используемых в путях классов, и никакое количество экранирования не поможет вам в этом. (Было бы лучше использовать сам разделитель каталогов в качестве разделителя компонентов пакета, но они различаются в разных операционных системах, и Java хотела быть независимой от ОС. Это одна из цен, которую за это нужно платить.)

...