Как установить переменную CLASSPATH для папки в Ubuntu


16

Я знаю, что export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHдобавит tools.jar в CLASSPATH, но я хочу установить папку в CLASSPATH

как это

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

но это не работает.

Ответы:


11

Во-первых, как правило, установка env var CLASSPATHобычно вызывает больше проблем, чем решает - поскольку не все приложения хотят / нуждаются в одном и том же пути к классам, и часто ломаются, когда нежелательные или даже ненужные файлы jar включены в путь к классам. Java-приложение должно включать только минимальное количество банок, которое требуется, не больше, не меньше.

Если у вас есть конкретные, отдельные приложения , которые требуют, чтобы установить путь к классам, то предпочтительным является , как правило , параметр командной строки: java -cp path1:path2:.... Для значков рабочего стола можно изменить команду, чтобы включить эти параметры, или сценарии оболочки можно изменить, чтобы включить эти параметры.

Это сказанное (и так как всегда есть исключения из правила), то в зависимости от версии java (это требует java 6 или более поздней версии), вы можете указать, что целый каталог jar будет добавлен в classpath, добавив " *" в конце каталога; например, следующее:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Средства:

  • /dir1/foo.jar - (единственная банка) будет добавлена ​​в путь к классам;
  • /dir2/dir3- все классы un-jar'd в этом каталоге будут добавлены в путь к классам (должны быть в правильной структуре пакета; например, com.my.Foo.classдолжны быть в /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- все банки в этом каталоге (то есть /dir5/dir6/*.jar) будут добавлены в путь к классам. Обратите внимание, что это " *" не подстановочный знак (вы не можете использовать f*.jarили даже *.jar); это специальный символ, указывающий «добавить все банки»

В общем случае, если вам нужно добавить целый каталог jar-файлов в путь к классам приложения, приложение было упаковано неправильно. Скорее, приложение должно иметь манифест, содержащий список банок, от которых он зависит. Или, по крайней мере, только один jar-файл должен быть добавлен в ваш classpath, и этот jar-файл может содержать весь список jar-файлов в некотором подкаталоге.


Мне нужно больше 5 часов, чтобы понять это в Ubuntu 12.04. После того, как вы скомпилируете файл и запустите класс, важны две вещи. 1. Используете ли вы пакет в своем классе. И вам нужно использовать «java -cp. ClassName» в родительской папке пакета. 2. Вы должны использовать ".:" Подобно "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
Чжихун

@zhihong, вы должны рассмотреть возможность использования IDE, такой как netbeans, позволяя отложить его до используемого инструмента сборки, который фактически настраивает ваш путь к классам. В Netbeans создайте новый проект, используя maven или gradle (или ant - но это становится слишком сложным при работе с зависимостями (см. Также: задачи maven ant, которые я предпочитаю над ivy)). Gradle в настоящее время «горячая» вещь, fwiw; Вы должны попробовать. Кроме того, (1) вы всегда должны использовать имена пакетов; и (2) никогда не требуется включать классы в каталог jvm в classpath; они уже находятся в "загрузочном" классе.
Майкл

спасибо за ваше предложение. На самом деле, я использую Eclipse, и код там работает правильно, но когда я запускаю его в терминале, то получаю «ClassNotFoundException». Я пробовал много способов добавить внешний lib / jar, но все не удалось. Наконец, он работает путем включения директории jvm и внешнего lib / jar в командную строку WITH. Но я сегодня попробовал, вы правы, каталог jvm не нужен.
Чжихун

2

если вы хотите установить classpath навсегда, то 1) выясните, где установлена ​​java .. вы можете использовать "whereis java" openjdk-7/6 находится в / usr / lib / jvm / .....

2) нам нужно настроить CLASSPATH в / etc / environment

  sudo gedit /etc/environment

3) добавьте следующие лайки .. (НЕ ОСТАВЛЯЙТЕ ЛЮБЫЕ ПРОСТРАНСТВА ПРИ ПЕЧАТИ) (настройте в соответствии с вашей версией Java и установкой) (этот домашний путь для open jdk 7)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

отдельный каталог с помощью ":"


Почему каждый добавляет "{JAVA_HOME} / lib" в свой путь к классам? Это не обязательно, или даже хорошая идея. В этом отношении установка env CLASSPATH также является плохой идеей, если только он не находится в сценарии оболочки, просто для этого сценария, и в этом случае параметр командной строки "-cp" для java все равно будет предпочтительнее.
Майкл

0

открыть терминал и набрать

sudo nano ~ / .bashrc

добавить все экспорты, которые вам нужны, как ...

экспорт JAVA_HOME = / usr / local / java / jdk1.6.0_06 (ваш путь)

export ANT_HOME = / opt / ant / apache-ant-1.9.4

наконец перезапустите терминал, чтобы изменения вступили в силу

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.