Компиляция с помощью -sourcepath

1. Компиляция с помощью -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. Ключевые моменты

  1. Ключ -sourcepath указывает каталоги, в которых компилятор должен искать иерархию исходных файлов.
  2. Ключ -sourcepath может содержать несколько каталогов, разделенных точкой с запятой.
  3. -sourcepath может содержать относительные и абсолютные пути.
Read also:
Comments