У кого-нибудь есть идея, почему эта команда отлично работает в Windows, но в Linux я получаю ClassNotFoundException game.ui.Main
java -cp ".;lib/*" game.ui.Main -Xms64m -Xmx128m
моя структура папок выглядит так:
lib/- Jars
game/- Файлы классов
Это последняя версия Java 6.
Ответ 1
Синтаксис classpath зависит от ОС. Из Wikipedia:
Будучи тесно связанным с файлом системы, командной строки Classpath синтаксис зависит от система. Например:
для всех Unix-подобных операционных систем (например, Linux и Mac OS X), структура каталогов имеет синтаксис Unix, с отдельными путями файлов, разделенными двоеточие ( ":" ).
в Windows, структура каталогов имеет синтаксис Windows, и каждый файл путь должен быть разделен точкой с запятой ( ";" ).
Это не применяется, если путь по классам определяется в файлах манифеста, где каждый путь к файлу должен быть разделен space (""), независимо от операционной системы.
Ответ 2
Попробуйте изменить полуколонию на двоеточие.
Сепаратор CLASSPATH зависит от платформы и совпадает с символом, возвращаемым java.io.File.pathSeparatorChar.
Ответ 3
Пути также важны при использовании классов классов в сценариях, предназначенных для работы на обеих платформах: Windows (т.е. cygwin) и Linux. Когда я это делаю, я включаю такую функцию для пути к классам. Команда "cygpath" с параметром "-w" преобразует пути в пути в стиле Windows. Поэтому в этом примере "/home/user/lib/this.jar" будет преобразован в нечто вроде "C:\Cygwin\home\user\lib\this.jar"
#!/bin/bash
function add_java_classpath() {
local LOCAL1=$1
if [ "$OSTYPE" == cygwin ]; then
LOCAL1="$(cygpath -C ANSI -w $LOCAL1)"
fi
if [ -z "$JAVA_CLASSPATH" ]; then
JAVA_CLASSPATH="$LOCAL1"
elif [ "$OSTYPE" != cygwin ]; then
JAVA_CLASSPATH="${JAVA_CLASSPATH}:$LOCAL1"
else
JAVA_CLASSPATH="${JAVA_CLASSPATH};$LOCAL1"
fi
}
add_java_classpath /home/user/lib/this.jar
add_java_classpath /usr/local/lib/that/that.jar
java -cp "${JAVA_CLASSPATH}" package.Main $@
Ответ 4
Окна:
java -cp file.jar;dir/* my.app.ClassName
Linux:
java -cp file.jar:dir/* my.app.ClassName
Напомните:
- Разделитель путей Windows
;
- Разделитель путей Linux
:
- В Windows, если аргумент cp не содержит пробел, кавычки необязательны