Classpath не работает под linux

У кого-нибудь есть идея, почему эта команда отлично работает в 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 [email protected]

Ответ 4

Окна:

java -cp file.jar;dir/* my.app.ClassName

Linux:

java -cp file.jar:dir/* my.app.ClassName

Напомните:

  • Разделитель путей Windows ;
  • Разделитель путей Linux :
  • В Windows, если аргумент cp не содержит пробел, кавычки необязательны