Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Установка пути к классу

Резюме

Путь к классу является путем, что среда выполнения Java ищет классы и другие файлы ресурсов. Путь поиска класса (более обычно известный более коротким именем, "путем к классу") может быть установлен, используя любого -classpath опция, вызывая инструмент JDK (привилегированный метод) или устанавливая CLASSPATH переменная окружения. -classpath опция предпочитается, потому что можно установить ее индивидуально для каждого приложения, не влияя на другие приложения и без других приложений, изменяющих его значение.

% sdkTool -classpath classpath1:classpath2...

- или

% setenv CLASSPATH classpath1:classpath2...

где:

sdkTool
Инструмент командной строки, такой как java, javac, javadoc, или apt. Для перечисления см. Инструменты JDK.
classpath1:classpath2
Пути к классам к.jar.zip или.class файлам. Каждый путь к классу должен закончиться именем файла или каталогом в зависимости от того, во что Вы устанавливаете путь к классу:

Записи разнообразного пути разделяются двоеточиями.

Путь к классу по умолчанию является текущим каталогом. Установка CLASSPATH переменная или использование -classpath переопределения параметра командной строки, которые значение по умолчанию, так, если Вы хотите включать текущий каталог в путь поиска, следует включать "." в новые настройки.

Игнорируются записи пути к классу, которые не являются ни каталогами, ни архивами (.zip или.jar файлы), ни *.

Описание

Путь к классу говорит инструменты JDK и приложения, где найти сторонние и определяемые пользователем классы - то есть, классы, которые не являются расширениями или частью платформы Java. Путь к классу должен найти любые классы, которые Вы скомпилировали с javac компилятором - его значение по умолчанию является текущим каталогом, чтобы удобно позволить тем классам быть найденными.

JDK, JVM и другие инструменты JDK находят классы, ища платформу Java (начальная загрузка) классы, любые классы расширения, и путь к классу, в том порядке. (Для получения дополнительной информации на поисковой стратегии, см., Как Классы Находятся.) Библиотеки классов для большинства приложений будут хотеть использовать в своих интересах механизм расширений. Вы только должны установить путь к классу, когда Вы хотите загрузить класс, это (a) не в текущем каталоге или в любом из его подкаталогов, и (b) не в расположении, определенном механизмом расширений.

Если Вы обновляете от более старой версии JDK, Ваши настройки запуска могут включать CLASSPATH настройки, которые больше не необходимы. Следует удалить любые настройки, которые не специализированы, такой как classes.zip. Некоторые сторонние приложения, которые используют виртуальную машину Java, могут изменить Ваш CLASSPATH переменная окружения, чтобы включать libaries они используют. Такие настройки могут остаться.

Можно изменить путь к классу при использовании инструментов JDK - опция пути к классу, когда Вы вызываете JVM или другие инструменты JDK или при использовании CLASSPATH переменная окружения. Используя -classpath опция предпочитается по установке CLASSPATH переменная окружения, потому что можно установить это индивидуально для каждого приложения, не влияя на другие приложения и без других приложений, изменяющих его значение.

Классы могут быть сохранены или в каталогах (папки) или в архивных файлах. Классы платформы Java сохранены в rt.jar. Для получения дополнительной информации на архивах и информации о том, как путь к классу работает, см. Понимание пути к классу и имен пакета около конца этого документа.

Важное Примечание: Некоторые более старые версии программного обеспечения JDK включенный a <jdk-dir>/classes запись в пути к классу по умолчанию. Тот каталог существует для использования программным обеспечением JDK, и не должен использоваться для классов приложений. Классы приложений должны быть помещены в каталог за пределами JDK direcotry иерархия. Тот путь, устанавливая новый JDK не вынуждает Вас переустановить классы приложений. Для совместимости с более старыми версиями, приложения, которые используют <jdk-dir>/classes каталог как библиотека классов будет работать в текущей версии, но нет никакой гарантии, что они будут работать в будущих версиях.

Используя инструменты JDK - опция пути к классу

У java инструментов Java, jdb, javac, и javah есть a -classpath опция, которая заменяет путь или соединяет каналом определенный CLASSPATH переменная окружения, в то время как инструмент работает. Это - рекомендуемая опция для того, чтобы изменить настройки пути к классу, потому что у каждого приложения может быть путь к классу, в котором это нуждается, не вмешиваясь ни в какое другое приложение.

У java инструмента времени выполнения есть a -cp опция, также. Эта опция является сокращением для -classpath.

Для совершенно особых случаев у и java и javac есть опции, которые позволяют Вам изменять путь, который они используют, чтобы найти их собственные библиотеки классов. Огромное большинство пользователей не будет, чтобы никогда не должно использовать те опции, как бы то ни было.

Используя переменную окружения ПУТИ К КЛАССУ

Вообще, Вы будете хотеть использовать -classpath параметр командной строки, как объяснено в предыдущем разделе. Этот раздел показывает Вам, как установить CLASSPATH переменная окружения, если Вы хотите сделать это, или четкие настройки, перенесенные от предыдущей установки.

Установка ПУТИ К КЛАССУ

В csh, CLASSPATH переменная окружения изменяется с setenv команда. Формат:

setenv CLASSPATH path1:path2

В sh, CLASSPATH переменная окружения может быть изменена с этими командами:

CLASSPATH = path1:path2:...

export CLASSPATH

Очистка ПУТИ К КЛАССУ

Если Ваш CLASSPATH переменная окружения была установлена в значение, которое не корректно, или если Ваш файл запуска или сценарий устанавливают неправильный путь, можно сбросить CLASSPATH в csh при использовании:

unsetenv CLASSPATH

В sh Вы использовали бы:

unset CLASSPATH

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

Изменение Настроек Запуска

Если CLASSPATH переменная устанавливается при системном запуске, место, чтобы искать это зависит от оболочки, которую Вы выполняете:

Shell Сценарий запуска
csh, tcsh Исследуйте Ваш .cshrc файл для setenv команда.
sh, ksh Исследуйте Ваш .profile файл для export команда.

Понимание подстановочных знаков пути к классу

Записи пути к классу могут содержать подстановочный символ базового имени *, который считают эквивалентным определению списка всех файлов в каталоге с расширением .jar или .JAR. Например, запись пути к классу foo/* определяет все файлы JAR в названном каталоге foo. Запись пути к классу, состоящая просто из *, расширяется до списка всех файлов фляги в текущем каталоге. Файлы рассмотрят независимо от того, скрываются ли они (то есть, имейте начинающиеся '.' имена).

Запись пути к классу, которая содержит *, не будет соответствовать файлы класса. Соответствовать оба класса и файлы JAR в единственном каталоге foo, используйте также foo:foo/* или foo/*:foo. Выбранный порядок определяет ли классы и ресурсы в foo загружаются перед файлами JAR в foo, или наоборот.

Подкаталоги не ищутся рекурсивно. Например, foo/* ищет файлы JAR только в foo, не в foo/bar, foo/baz, и т.д..

Порядок, в котором файлы JAR в каталоге перечисляются в расширенном пути к классу, не определяется и может измениться от платформы до платформы и даже с момента до момента на той же самой машине. Хорошо созданное приложение не должно зависеть ни от какого определенного порядка. Если определенный порядок требуется тогда, файлы JAR могут быть перечислены явно в пути к классу.

Расширение подстановочных знаков делается рано до вызова программы main метод, а не поздно, во время процесса загрузки класса непосредственно. Каждый элемент входного пути к классу, содержащего подстановочный знак, заменяется (возможно пустой) последовательность элементов, сгенерированных, перечисляя файлы JAR в именованном каталоге. Например, если каталог foo содержит a.jar, b.jar, и c.jar, тогда путь к классу foo/* расширяется в foo/a.jar:foo/b.jar:foo/c.jar, и та строка была бы значением системного свойства java.class.path.

CLASSPATH переменная окружения не обрабатывается никто по-другому от -classpath (или -cp) параметр командной строки. Таким образом, подстановочные знаки соблюдают во всех этих случаях. Однако, подстановочные знаки пути к классу не соблюдают в Class-Path явный флягой заголовок.

Понимание пути к классу и имен пакета

Классы Java организуются в пакеты, которые отображаются на каталоги в файловой системе. Но, в отличие от файловой системы, всякий раз, когда Вы определяете имя пакета, Вы определяете целое имя пакета - никогда часть его. Например, имя пакета для java.awt.Button всегда определяется как java.awt.

Например, предположите, что Вы хотите, чтобы Среда выполнения Java сочла класс названным Cool.class в пакете utility.myapp. Если путь к тому каталогу /java/MyClasses/utility/myapp, Вы установили бы путь к классу так, чтобы он содержал /java/MyClasses.

Чтобы выполнить то приложение, Вы могли использовать следующую команду JVM:

% java -classpath /java/MyClasses utility.myapp.Cool

Когда приложение работает, JVM использует настройки пути к классу, чтобы счесть любые другие классы определенными в utility.myapp пакет, которые используются Cool класс.

Отметьте, что все имя пакета определяется в команде. Не возможно, например, установить путь к классу, таким образом, это содержит /java/MyClasses/utility и используйте команду java myapp.Cool. Класс не был бы найден.

(Можно задаваться вопросом, что определяет имя пакета для класса. Ответ - то, что имя пакета является частью класса и не может быть изменено, кроме, перекомпилировав класс.)

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

Папки и архивные файлы

Когда классы сохранены в каталоге (папка), как /java/MyClasses/utility/myapp, тогда точки входа пути к классу к каталогу, который содержит первый элемент имени пакета. (в этом случае, /java/MyClasses, так как имя пакета utility.myapp.)

Но когда классы сохранены в архивном файле (.zip или.jar файл), запись пути к классу является путем к и включая.zip или.jar файл. Например, чтобы использовать библиотеку классов, которая находится в.jar файле, команда выглядела бы примерно так:

% java -classpath /java/MyClasses/myclasses.jar utility.myapp.Cool

Многократные спецификации

Найти файлы класса в каталоге /java/MyClasses так же как классы в /java/OtherClasses, Вы установили бы путь к классу в:

% java -classpath /java/MyClasses:/java/OtherClasses ...

Отметьте, что два пути разделяются двоеточием.

Порядок спецификации

Порядок, в котором Вы определяете многократные записи пути к классу, важен. Интерпретатор Java будет искать классы в каталогах в порядке, они появляются в переменной пути к классу. В примере выше, интерпретатор Java будет сначала искать необходимый класс в каталоге /java/MyClasses. Только если это не находит, что класс с именем собственным в том каталоге будет интерпретатор заглядывать /java/OtherClasses каталог.


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами