Путь к классам
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Путь к классам — это параметр виртуальной машины Java или компилятора Java , который указывает расположение определяемых пользователем классов и пакетов . Параметр может быть установлен либо в командной строке , либо через переменную среды .
Обзор и архитектура
[ редактировать ]Подобно классическому поведению динамической загрузки , при выполнении Java программ виртуальная машина Java находит и загружает классы лениво (она загружает байт-код класса только при первом использовании класса). Путь к классам сообщает Java, где искать в файловой системе файлы, определяющие эти классы.
Виртуальная машина ищет и загружает классы в следующем порядке:
- классы начальной загрузки: классы, которые являются фундаментальными для платформы Java (включая общедоступные классы библиотеки классов Java и частные классы, необходимые для функционирования этой библиотеки).
- классы расширения: пакеты , находящиеся в расширений каталоге среды выполнения Java или JDK ,
jre/lib/ext/
- определяемые пользователем пакеты и библиотеки
только пакеты JDK стандартного API По умолчанию доступны и пакеты расширений без необходимости указывать, где их найти. Путь для всех определяемых пользователем пакетов и библиотек должен быть установлен в командной строке (или в манифесте, связанном с файлом Jar, содержащим классы).
Установка пути для выполнения Java-программ
[ редактировать ]Предоставление в качестве аргумента приложения
[ редактировать ]Предположим, у нас есть пакет org.mypackage, содержащий классы:
- HelloWorld (основной класс)
- Класс поддержки
- УтильКласс
и файлы, определяющие этот пакет, физически хранятся в каталоге D:\myprogram (в Windows ) или /home/user/myprogram (в Linux ).
Структура файла выглядит следующим образом:
Microsoft Windows | Линукс |
---|---|
D:\myprogram\ | ---> org\ | ---> mypackage\ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class |
/home/user/myprogram/ | ---> org/ | ---> mypackage/ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class |
Когда мы вызываем Java, мы указываем имя запускаемого приложения: org.mypackage.HelloWorld. Однако мы также должны указать Java, где искать файлы и каталоги, определяющие наш пакет. Итак, чтобы запустить программу, мы используем следующую команду:
Microsoft Windows | Линукс |
---|---|
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 — имя основного класса.
Установка пути через переменную среды
[ редактировать ] с Переменная среды именем CLASSPATH
альтернативно может использоваться для установки пути к классам. В приведенном выше примере мы также могли бы использовать в Windows:
D:\myprogram>set CLASSPATH=D:\myprogram
D:\myprogram>java org.mypackage.HelloWorld
Правило заключается в том, что -classpath
опция, когда она используется для запуска Java-приложения, переопределяет CLASSPATH
переменная среды. Если ничего не указано, текущий рабочий каталог в качестве пути к классам используется . Это означает, что когда наш рабочий каталог D:\myprogram\
(в Linux, /home/user/myprogram/
), нам не нужно будет явно указывать путь к классам. Однако при переопределении рекомендуется включить текущую папку. "."
в путь к классам в случае, если требуется загрузка классов из текущей папки.
То же самое относится не только к средству запуска Java, но и к javac , компилятору Java.
Установка пути к файлу Jar
[ редактировать ]Если программа использует вспомогательную библиотеку, заключенную в Jar-файл с именем supportLib.jar , физически расположенный в каталоге D:\myprogram\lib\, и соответствующая физическая файловая структура:
D:\myprogram\ | ---> lib\ | ---> supportLib.jar | ---> org\ | ---> mypackage\ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class
следующий параметр командной строки необходим :
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-файлы в определенном каталоге в путь к классам, используя подстановочные знаки.
Пример Windows:
D:\myprogram>java -classpath ".;c:\mylib\*" MyApp
Пример Linux:
$ java -classpath '.:/mylib/*' MyApp
Это работает для обоих -classpath
параметры и пути к классам среды.
Установка пути в файле манифеста
[ редактировать ]Если программа заключена в файл Jar с именем helloWorld.jar , расположенный непосредственно в каталоге D:\myprogram , структура каталогов будет следующей:
D:\myprogram\ | ---> helloWorld.jar | ---> lib\ | ---> supportLib.jar
Файл манифеста , определенный в helloWorld.jar, имеет следующее определение:
Main-Class: org.mypackage.HelloWorld
Class-Path: lib/supportLib.jar
Файл манифеста должен заканчиваться либо новой строкой, либо возвратом каретки.
Программа запускается следующей командой:
java -jar D:\myprogram\helloWorld.jar [app arguments]
При этом автоматически запускается org.mypackage.HelloWorld, указанный в классе Main-Class, с аргументами. Пользователь не может заменить это имя класса с помощью вызова java -jar
. Class-Path описывает расположение файла supportLib.jar относительно расположения библиотеки helloWorld.jar . Ни абсолютный путь к файлу, который разрешен в -classpath
параметр в командной строке, а также внутренние пути jar не поддерживаются. Это означает, что если основной файл класса содержится в jar, org/mypackage/HelloWorld.class должен быть допустимым путем в корне внутри jar.
Несколько записей пути к классам разделяются пробелами:
Class-Path: lib/supportLib.jar lib/supportLib2.jar
Примечания по ОС
[ редактировать ]тесно связан с файловой системой, Поскольку синтаксис пути к классам в командной строке он зависит от операционной системы. [1] Например:
- во всех Unix-подобных операционных системах (таких как Linux и Mac OS X ) структура каталогов имеет синтаксис Unix с отдельными путями к файлам, разделенными двоеточием ( «:»).
- в Windows структура каталогов имеет синтаксис Windows, и каждый путь к файлу должен быть разделен точкой с запятой («;»).
Это не применяется, если путь к классам определен в файлах манифеста , где каждый путь к файлу должен быть разделен пробелом («»), независимо от операционной системы.
См. также
[ редактировать ]- Загрузчик классов Java
- Система модулей платформы Java
- rpath — жестко заданный путь поиска.
Ссылки
[ редактировать ]- ^ «Классовая дорога» . Проверено 26 июня 2016 г.