Jump to content

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

(Перенаправлено из пути к классам (Java) )

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

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

[ редактировать ]

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

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

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

только пакеты 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, и каждый путь к файлу должен быть разделен точкой с запятой («;»).

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

См. также

[ редактировать ]
  1. ^ «Классовая дорога» . Проверено 26 июня 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6264664ee439df734d754e74a74c646b__1721933400
URL1:https://arc.ask3.ru/arc/aa/62/6b/6264664ee439df734d754e74a74c646b.html
Заголовок, (Title) документа по адресу, URL1:
Classpath - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)