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


У кого-нибудь есть идея, почему эта команда отлично работает в Windows, но в Linux я получаю игру ClassNotFoundException.пользовательский интерфейс.Главное

java -cp ".;lib/*" game.ui.Main -Xms64m -Xmx128m

моя структура папок выглядит так: lib / - банки game / - Class files

Это последняя версия Java 6.

4 51

4 ответа:

синтаксис пути к классам зависит от ОС. От Википедия:

будучи тесно связаны с файлом система, путь к классам командной строки синтаксис зависит от операционной системы система. Например:

на всех Unix-подобных операционных систем (например, Linux и Mac OS X), структура каталогов в Unix синтаксис , с отдельными путями к файлам, разделенными колон.)":"(

в Windows, структура каталогов есть Синтаксис Windows, и каждый файл путь должен быть разделен точкой с запятой (";").

Это не применяется, когда путь к классам определяется в файлах манифеста, где каждый путь к файлу должен быть разделен символом пробел (" "), независимо от операционная система.

попробуйте поменять точку с запятой на двоеточие.

разделитель classpath-это зависит от платформы, и так же, как персонаж, возвращенные Ява.Ио.Файл.pathSeparatorChar.

пути также важны при использовании путей к классам в сценариях, предназначенных для запуска на обеих платформах: Windows (т. е. cygwin) и Linux. Когда я делаю это, я включаю такую функцию для пути к классам. Команда "cygpath" с параметром "- w " преобразует пути в пути в стиле Windows. Итак, в этом примере "/home/user/lib/this.jar " будет преобразован во что-то вроде "C:\Cygwin\home\user\lib\this.банку"

#!/bin/bash

function add_java_classpath() {
  local LOCAL1=
  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 $@

Windows:

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

Linux:

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

напомню:

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