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

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

Резюме

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

% sdkTool -classpath classpath1:classpath2...

- или

% setenv CLASSPATH classpath1:classpath2...

где:

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

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

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

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

Описание

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

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

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

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

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

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

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

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

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

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

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

Вообще, Вы будете хотеть использовать -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 команда.

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

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

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

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

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

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

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

Понимание пути class и имен пакета

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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