Classpath не работает под Linux - PullRequest
58 голосов
/ 25 декабря 2010

У всех есть идеи, почему эта команда отлично работает в Windows, но в Linux я получаю ClassNotFoundException game.ui.Main

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

структура моей папки выглядит следующим образом: lib / - Банки игра / - файлы классов

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

Ответы [ 4 ]

102 голосов
/ 25 декабря 2010

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

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

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

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

.

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

26 голосов
/ 25 декабря 2010

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

Разделитель CLASSPATH зависит от платформы и совпадает с символом, возвращаемым java.io.File.pathSeparatorChar .

4 голосов
/ 24 декабря 2016

Пути также важны при использовании путей к классам в сценариях, предназначенных для запуска на обеих платформах: Windows (то есть cygwin) и Linux. Когда я делаю это, я включаю такую ​​функцию для classpath. Команда «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 $@
1 голос
/ 20 марта 2017

Windows

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

Linux:

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

Напомните:

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