Classpath
1. Что такое Classpath
В большинстве случаев команды java
и javac
должны найти другие классы необходимые для компиляции и выполнения. Самый распространенный случай - это использование классов входящих в Java SE. Или, например, нам нужно скомпилировать и запустить класс, который использует другие классы, не входящие в Java SE.
Команды java
и javac
используют следующий алгоритм поиска:
- Они используют один и тот же список каталогов, в которых ищут необходимые файлы.
- Обе команды в процессе поиска просматривают список каталогов в одном и том же порядке.
- Как только необходимый класс найден, процесс поиска прекращается. Если список каталогов содержит два или более классов с одним и тем же именем, используется первый найденный.
- Первое место используемое в процессе поиска - это каталоги содержащие классы Java SE.
- Второе место - каталоги определенные в так называемом Сlasspath.
Classpath может быть задано двумя способами:
- Как переменная окружения CLASSPATH. Команды
java
иjavac
используют этот способ по умолчанию. - Как ключ -classpath (или -cp) команд java и javac. Этот способ переопределяет список каталогов заданный переменной окружения, но только для конкретного вызова. Данный метод является более предпочтительным.
2. Использование ключа -classpath
Рассмотрим использование ключа -cp
используя классы first.Example1
и second.Example2
, описанные здесь. Но предположим, что класс second.Example2
находится в другом проекте и доступны только его .class
файлы. На рисунке изображена схема каталогов для данного примера:
Следующая команда будет использована для компиляции first.Example1
класса, где ключ -cp
указывает на расположение .class
файла second.Example2
:
cd projectExample1
javac -d classes -cp ../projectExample2/classes src/first/Example1.java
Для запуска программы используется команда:
cd projectExample1
java -cp classes;../projectExample2/classes first.Example1
Ключ -cp
указывает расположение .class
файла second.Example2
(как и при компиляции), а также путь для поиска .class
файла first.Example1
- classes.
Несколько важных правил при использовании ключа -cp
:
- Ключ
-cp
может содержать несколько каталогов, разделенных точкой с запятой, как показано в примере при запуске командыjava
. - Если указывается подкаталог, это НЕ означает что родительский каталог тоже входит в classpath. Например, для ключа
-cp ../projectExample2/classes
, каталог ../projectExample2 не будет входить в classpath. - Если используется ключ
-cp
, то командыjavac
иjava
НЕ ищут классы в текущем каталоге по умолчанию. Для указания текущего каталога используется точка. Например:cd projectExample1/classes java -cp .;../../projectExample2/classes first.Example1
- Если ключ
-cp
НЕ используется, компилятор вносит текущую рабочую директорию (.) в classpath. - Ключ -cp может содержать относительные и абсолютные пути.
Презентацию с видео можно скачать на Patreon.
Please log in or register to have a possibility to add comment.