Компиляция с помощью -sourcepath
В этой статье мы рассмотрим как использовать для компиляции ключ -sourcepath.
1. Компиляция с помощью -sourcepath
Ключ sourcepath указывает на каталоги, в которых компилятору необходимо искать иерархию исходных файлов.
Рассмотрим пример, в котором имеется два класса находящихся в разных пакетах - first.Example1
и second.Example2
. Класс first.Example1
создает экземпляр объекта second.Example2
:
package first;
import second.Example2;
public class Example1 {
public static void main(String[] args) {
Example2 example2 = new Example2();
System.out.print("Done!");
}
}
package second;
public class Example2 {
}
И имеется следующая структура каталогов:
Давайте попробуем скомпилировать Example1.java
так, как делали это ранее:
cd project1
javac –d classes src/first/Example1.java
Результат компиляции:
src\first\Example1.java:9: error: package second does not exist
second.Example2 example2 = new second.Example2();
^
src\first\Example1.java:9: error: package second does not exist
second.Example2 example2 = new second.Example2();
^
2 errors
Ошибки произошли из-за того, что хотя javac и знал, где найти Example1.java
, но он не знал, где находится Example2.java
. Для решения этой проблемы используется ключ sourcepath, указывающий на каталоги, в которых компилятору необходимо искать иерархию исходных файлов. В нашем случае это src. Перепишем строку компиляции:
javac -d classes -sourcepath src src/first/Example1.java
Теперь программа компилируется без ошибок. Следует обратить внимание, что javac также скомпилировал файл Example2.java
, на который ссылается скомпилированный файл Example1.java
.
Ключ sourcepath может содержать несколько каталогов, отделенных точкой с запятой, хотя обычно в этом нет необходимости. Например, если нужно включить как локальный каталог src, так и каталог C:\projects\anotherproject\src, где хранится исходный код для другого проекта, то используем следующую команду:
javac -d classes -sourcepath src;C:\projects\anotherproject\src
src/first/Example1.java
Стоит заметить, что данная команда не компилирует каждый файл, найденный в какой-либо из этих иерархий. Она компилирует только файлы, на которые прямо или косвенно ссылается единичный компилируемый файл .java
.
2. Ключевые моменты
- Ключ -sourcepath указывает каталоги, в которых компилятор должен искать иерархию исходных файлов.
- Ключ -sourcepath может содержать несколько каталогов, разделенных точкой с запятой.
- -sourcepath может содержать относительные и абсолютные пути.
Презентацию с видео можно скачать на Patreon.
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.