Урок 1

Classpath


1. Что такое Classpath

В большинстве случаев команды java и javac должны найти другие классы необходимые для компиляции и выполнения. Самый распространенный случай - это использование классов входящих в Java SE. Или, например, нам нужно скомпилировать и запустить класс, который использует другие классы, не входящие в Java SE.

Команды java и javac используют следующий алгоритм поиска:

  1. Они используют один и тот же список каталогов, в которых ищут необходимые файлы.
  2. Обе команды в процессе поиска просматривают список каталогов в одном и том же порядке.
  3. Как только необходимый класс найден, процесс поиска прекращается. Если список каталогов содержит два или более классов с одним и тем же именем, используется первый найденный.
  4. Первое место используемое в процессе поиска - это каталоги содержащие классы Java SE.
  5. Второе место - каталоги определенные в так называемом Сlasspath.

Classpath может быть задано двумя способами:

  1. Как переменная окружения CLASSPATH. Команды java и javac используют этот способ по умолчанию.
  2. Как ключ -classpath (или -cp) команд java и javac. Этот способ переопределяет список каталогов заданный переменной окружения, но только для конкретного вызова. Данный метод является более предпочтительным.

Способы задания Classpath

2. Использование ключа -classpath

Рассмотрим использование ключа -cp используя классы p1.Example1 и p2.Example2 из примера 3. Но предположим, что класс p2.Example2 находится в другом проекте и доступны только его .class файлы. На рисунке изображена схема каталогов для данного примера:

Структура каталогов

Следующая команда будет использована для компиляции  p1.Example1 класса, где ключ -cp указывает на расположение .class файла p2.Example2:

cd project1
javac -d classes -cp ../project2/classes src/p1/Example1.java

Для запуска программы используется команда:

cd project1
java -cp classes;../project2/classes p1.Example1

Ключ -cp указывает расположение .class файла p2.Example2 (как и при компиляции), а также путь для поиска .class файла p1.Example1 - classes. 

Несколько важных правил при использовании ключа -cp:

  1. Ключ -cp может содержать несколько каталогов, разделенных точкой с запятой, как показано в примере при запуске команды java.
  2. Если указывается подкаталог, это НЕ означает что родительский каталог тоже входит в classpath. Например для ключа -cp ../project2/classes, каталог ../project2 не будет входить в classpath.
  3. Если используется ключ -cp, то команды javac и java НЕ ищут классы в текущем каталоге по умолчанию. Для указания текущего каталога используется точка. Например:
    cd project1/classes
    java -cp .;../../project2/classes p1.Example1​
  4. Если ключ -cp НЕ используется, компилятор вносит текущую рабочую директорию (.) в classpath. 
  5. Ключ -cp может содержать относительные и абсолютные пути.

   

Ресурсы:

1. SCJP Sun Certified Programmer for Java 6 Exam 310-065 - 10. Development 

2. https://www.ibm.com/developerworks/ru/library/j-classpath-windows/



0 comments
Leave your comment: