Ключи classpath и sourcepath в Java - Вопросы
Всего: 5 вопросов
1. Что такое classpath и где команды java и javac ищут классы?
Что такое classpath и где команды java и javac ищут классы?
Classpath — это список каталогов, в которых команды java и javac ищут нужные .class-файлы. Обе команды используют один и тот же список и просматривают его в одном и том же порядке: сначала каталоги классов Java SE, затем каталоги, заданные в classpath. Как только нужный класс найден, поиск прекращается — если классов с одинаковым именем несколько, используется первый найденный.
2. Какими способами можно задать classpath и какой используется по умолчанию?
Какими способами можно задать classpath и какой используется по умолчанию?
Classpath можно задать двумя способами: как переменную окружения CLASSPATH (используется по умолчанию) и как ключ -classpath (или -cp) команд java и javac. Ключ -cp переопределяет переменную окружения, но только для одного конкретного вызова, и считается более предпочтительным и предсказуемым способом.
3. Чем отличается ключ -sourcepath от -classpath?
Чем отличается ключ -sourcepath от -classpath?
Ключ -sourcepath указывает компилятору javac, где искать исходные .java-файлы, на которые ссылается компилируемый класс. Ключ -classpath (или -cp) указывает, где искать готовые скомпилированные .class-файлы и библиотеки — его используют и javac, и java.
4. Почему возникает ошибка вроде NoClassDefFoundError или ClassNotFoundException и как её избежать?
Почему возникает ошибка вроде NoClassDefFoundError или ClassNotFoundException и как её избежать?
Такая ошибка возникает, когда JVM или компилятор не может найти нужный .class-файл, потому что каталог или JAR с этим классом не указан в classpath. Чтобы этого избежать, добавьте нужный каталог или JAR в ключ -cp. Помните: как только используется ключ -cp, текущий каталог перестаёт входить в classpath по умолчанию — чтобы добавить его, укажите точку явно, например -cp .;../projectExample2/classes.
5. Как указать несколько каталогов в ключе -cp или -sourcepath?
Как указать несколько каталогов в ключе -cp или -sourcepath?
Каталоги перечисляются в одном значении через системный разделитель путей: на Windows — точка с запятой (;), на Linux и macOS — двоеточие (:). Например, на Windows: -cp classes;../projectExample2/classes; на Linux/macOS: -cp classes:../projectExample2/classes.