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