Как установить classpath в Java? - PullRequest
1 голос
/ 02 марта 2011

У меня есть много jar-файлов, которые нужно добавить в мой classpath, поэтому каждый раз, когда я компилирую свой java-файл, я получаю такую ​​команду:

javac -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. CollectionIndexer.java

Я пытался использовать:

set CLASSPATH=commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:.

и затем:

javac CollectionIndexer.java

но банка вообще не добавляется: я получаю сообщение об ошибке из-за отсутствия банки ... спасибо

Ответы [ 6 ]

3 голосов
/ 02 марта 2011

Попробуйте использовать export CLASSPATH=... вместо set CLASSPATH=...

(я предполагаю, что вы используете поле Unix некоторого описания, учитывая двоеточия в пути к классам.)

1 голос
/ 02 марта 2011

Вы установили CLASSPATH, но не поместили его в среду.Так что это переменная, но не совсем переменная окружения.

Чтобы преобразовать переменную в сценарии / в сеансе в переменную окружения, используйте команду export, например,

export CLASSPATH

Это переводит переменную в переменную среды (которая будет доступна для любой оболочки, которая наследует среду).

Некоторые системы допускают объединение набора и экспорта.В таких системах вы можете комбинировать вашу команду set с командой export следующим образом:

export CLASSPATH=<your value here>

Команда java читает только переменную среды CLASSPATH.Он не может просматривать переменные, не относящиеся к среде, поскольку они не наследуются от процесса к процессу.

1 голос
/ 02 марта 2011

Кстати, не очень приятно изменять переменную окружения CLASSPATH специально для компиляции проекта, учитывая, что после этого все другие проекты будут наследовать это изменение.Это, конечно, стоит, только если вы глобально меняете его.Если нет, и вместо этого вы планируете написать небольшой скрипт для создания своего проекта, почему бы вам не рассмотреть вопрос об использовании ant?Удачи!

1 голос
/ 02 марта 2011

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

compile.bat

javac -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1

run.bat

java -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1

С этим вы можете сделать это: -

compile.bat CollectionIndexer.java

run.bat CollectionIndexer

Еще лучше, вы можете объединить их вместе: -

compilerun.bat

Убедитесь, что вы добавляете ".java" к javac's %1

javac -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1.java
java -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1

С этим вы можете сделать это: -

compilerun.bat CollectionIndexer

Мне нравится этот подход намного лучше, чем установка classpath, потому что мне не нужно повторно вводить classpath каждый раз, когда я открываю терминал.:)

0 голосов
/ 02 марта 2011

может быть, вы хотите попробовать использовать maven для сборки своего приложения? Его действительно легко настроить, и он устраняет все проблемы с управлением зависимостями.

также из java 6 вы можете использовать подстановочные знаки в classpath: set CLASSPATH = my_libs \ *;

0 голосов
/ 02 марта 2011

Помимо экспорта среды UNIX, используйте абсолютные пути. Например, запись пути к классу: commons-digester-2.1 / commons-digester-2.1.jar работает, только если вы находитесь в родительском каталоге установочного каталога commons-digester-2.1.

В Unix должно быть общее расположение, в которое вы устанавливаете свои пакеты. Что-то вроде / usr / local, / usr / lib или /usr/local/lib.

...