Путь к классам

Classpath — это параметр в виртуальной машине Java или компиляторе Java , который указывает местоположение пользовательских классов и пакетов . Параметр может быть установлен либо в командной строке , либо через переменную окружения .

Обзор и архитектура

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

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

  1. Классы начальной загрузки: классы, которые являются основополагающими для платформы Java (включая открытые классы библиотеки классов Java и закрытые классы, необходимые для функционирования этой библиотеки).
  2. классы расширения: пакеты , которые находятся в каталоге расширений Java Runtime Environment или JDK ,jre/lib/ext/
  3. определяемые пользователем пакеты и библиотеки

По умолчанию доступны только пакеты стандартного API JDK и пакеты расширений без необходимости указывать, где их искать. Путь для всех пользовательских пакетов и библиотек должен быть установлен в командной строке (или в манифесте , связанном с файлом Jar, содержащим классы).

Установка пути для выполнения программ Java

Подача в качестве аргумента заявки

Предположим, у нас есть пакет org.mypackage, содержащий классы:

  • HelloWorld (основной класс)
  • ПоддержкаКласс
  • UtilClass

и файлы, определяющие этот пакет, физически хранятся в каталоге D:\myprogramWindows ) или /home/user/myprogramLinux ).

Структура файла выглядит так:

Майкрософт Виндоуслинукс
D:\мояпрограмма\ | ---> орг\  | ---> мойпакет\ | ---> HelloWorld.класс  ---> SupportClass.класс  ---> UtilClass.класс 
/home/user/myprogram/ | ---> орг/  | ---> мойпакет/ | ---> HelloWorld.класс  ---> SupportClass.класс  ---> UtilClass.класс 

Когда мы вызываем Java, мы указываем имя приложения для запуска: org.mypackage.HelloWorld. Однако мы также должны указать Java, где искать файлы и каталоги, определяющие наш пакет. Поэтому для запуска программы мы используем следующую команду:

Майкрософт Виндоуслинукс
java -classpath D:\myprogram org.mypackage.HelloWorld
java -cp /home/user/myprogram org.mypackage.HelloWorld 

где:

  • java— это средство запуска среды выполнения Java , тип инструмента SDK (инструмент командной строки, такой как javac , javadoc или apt )
  • -classpath D:\myprogram задает путь к пакетам, используемым в программе (в Linux, -cp /home/user/myprogram ) и
  • org.mypackage.HelloWorld — имя основного класса

Установка пути через переменную среды

Переменная окружения named CLASSPATHможет быть альтернативно использована для установки classpath. Для приведенного выше примера мы также могли бы использовать в Windows:

D:\myprogram> set  CLASSPATH = D:\myprogram D:\myprogram> java org.mypackage.HelloWorld

Правило заключается в том -classpath, что при использовании параметра для запуска приложения Java он переопределяет CLASSPATHпеременную окружения. Если ничего не указано, в качестве classpath используется текущий рабочий каталогD:\myprogram\ . Это означает, что когда наш рабочий каталог (в Linux, /home/user/myprogram/), нам не нужно будет явно указывать classpath. Однако при переопределении рекомендуется включать текущую папку "."в classpath в случае, если требуется загрузка классов из текущей папки.

То же самое относится не только к java launcher, но и к javac , компилятору Java.

Установка пути к Jar-файлу

Если программа использует вспомогательную библиотеку, заключенную в Jar-файл с именем supportLib.jar , физически расположенный в каталоге D:\myprogram\lib\, и соответствующая физическая структура файла выглядит следующим образом:

D:\мояпрограмма\ | ---> библиотека\ | ---> supportLib.jar | ---> орг\ | ---> мойпакет\ | ---> HelloWorld.класс ---> SupportClass.класс ---> UtilClass.класс

необходима следующая опция командной строки :

java -classpath D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.HelloWorld

или альтернативно:

D:\myprogram> set  CLASSPATH = D:\myprogram;D:\myprogram\lib\supportLib.jar D:\myprogram> java org.mypackage.HelloWorld

Добавление всех JAR-файлов в каталог

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

Пример для Windows:

D:\myprogram> java -classpath ".;c:\mylib\*" МоеПриложение

Пример для Linux:

$ java  -classpath '.:/mylib/*' МоеПриложение  

Это работает как для -classpathпараметров, так и для путей к классам среды.

Установка пути в файле манифеста

Если программа заключена в Jar-файл с именем helloWorld.jar , расположенный непосредственно в каталоге D:\myprogram , то структура каталогов будет следующей:

D:\мояпрограмма\ | ---> helloWorld.jar | ---> библиотека\  | ---> supportLib.jar

Файл манифеста , определенный в helloWorld.jar, имеет следующее определение:

Основной класс : org.mypackage.HelloWorld Путь к классу : lib/supportLib.jar  

Файл манифеста должен заканчиваться либо новой строкой, либо возвратом каретки.

Программа запускается следующей командой:

java -jar D:\myprogram\helloWorld.jar [аргументы приложения]

Это автоматически запускает org.mypackage.HelloWorld , указанный в классе Main-Class с аргументами. Пользователь не может заменить это имя класса с помощью вызова java -jar. Class-Path описывает расположение supportLib.jar относительно расположения библиотеки helloWorld.jar . Ни абсолютный путь к файлу, который разрешен в -classpathпараметре командной строки, ни внутренние пути jar не поддерживаются. Это означает, что если файл основного класса содержится в jar, org/mypackage/HelloWorld.class должен быть допустимым путем в корне внутри jar.

Несколько записей classpath разделяются пробелами:

Путь к классу : lib/supportLib.jar lib/supportLib2.jar 

Примечания, касающиеся ОС

Синтаксис командной строки Classpath тесно связан с файловой системой и зависит от операционной системы. [1] Например:

  • Во всех Unix-подобных операционных системах (таких как Linux и Mac OS X ) структура каталогов имеет синтаксис Unix, в котором отдельные пути к файлам разделяются двоеточием ( «:»).
  • В Windows структура каталогов имеет синтаксис Windows, и каждый путь к файлу должен быть разделен точкой с запятой (";").

Это не применяется, если Classpath определен в файлах манифеста , где каждый путь к файлу должен быть разделен пробелом (" "), независимо от операционной системы.

Смотрите также

Ссылки

  1. ^ "The Classpath" . Получено 2016-06-26 .
  • Примечание, объясняющее, как находят классы Java, на веб-сайте Oracle
  • Спецификация того, как задать Classpath на сайте Oracle
Получено с "https://en.wikipedia.org/w/index.php?title=Classpath&oldid=1236656665"