добавление пути к классам в Linux - PullRequest
12 голосов
/ 24 февраля 2009
export CLASSPATH=.;../somejar.jar;../mysql-connector-java-5.1.6-bin.jar
java -Xmx500m folder.subfolder../dit1/some.xml
cd ..

является приведенным выше оператором для установки classpath на уже существующий classpath в linux, правильно или нет

Ответы [ 4 ]

25 голосов
/ 24 февраля 2009

Мне не нравится установка CLASSPATH. CLASSPATH - это глобальная переменная, и поэтому она является злой:

  • Если вы измените его одним скриптом, некоторые java-программы внезапно перестанут работать.
  • Если вы положите туда библиотеки для всех вещей, которые вы запускаете, и это будет загромождено.
  • Вы получите конфликты, если два разных приложения используют разные версии одной и той же библиотеки.
  • Нет увеличения производительности, поскольку библиотеки в CLASSPATH не являются общими - только их имя является общим.
  • Если вы поставите точку (.) Или любой другой относительный путь в CLASSPATH, что означает разные вещи в каждом месте - это наверняка вызовет путаницу.

Поэтому предпочтительным способом является установка classpath для каждого запуска jvm, например:

java -Xmx500m -cp ".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar"    "folder.subfolder../dit1/some.xml

Если он становится длинным, стандартной процедурой является обертывание его в bash или пакетный скрипт для сохранения ввода.

16 голосов
/ 24 февраля 2009

Всегда рекомендуется никогда не разрушительно уничтожать существующий путь к классу, если у вас нет веских причин.

Следующая строка сохраняет существующий путь к классу и добавляет к нему.

export CLASSPATH="$CLASSPATH:foo.jar:../bar.jar"
11 голосов
/ 01 декабря 2011

Важным отличием установки Classpath в Windows и Linux является разделитель пути, который является ";" (точка с запятой) в Windows и ":" (двоеточие) в Linux. Также %PATH% используется для представления значения существующей переменной пути в Windows, а ${PATH} используется для той же цели в Linux (в оболочке bash). Вот способ настроить classpath в Linux:

export CLASSPATH=${CLASSPATH}:/new/path

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

  1. -cp переопределяет параметры CLASSPATH переменная окружения.
  2. Путь к классу, определенный в файле манифеста, переопределяет переменную -cp и CLASSPATH.

Ссылка: Как работает Classpath в Java .

6 голосов
/ 24 февраля 2009

Пути в linux разделяются двоеточиями (:), а не точками с запятой (;), поскольку theatrus правильно использовал это в своем примере. Я считаю, что Java соблюдает это соглашение.

Редактировать

В качестве альтернативы тому, что Энди предложил , вы можете использовать следующую форму (которая устанавливает CLASSPATH на время выполнения команды):

CLASSPATH=".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar" java -Xmx500m ...

какой вам удобнее.

...