Подтвердить что ты не робот

Различия между параметрами classpath и sourcepath javac

Я прочитал документацию Sun и много сообщений о переполнении стека, но я все еще запутался в различиях между параметрами компилятора Java -cp и -sourcepath.

Скажем, у меня есть эта структура каталогов:

c:\Java\project1\src (where the Java source files are)  
c:\Java\project1\bin (where the Java class files will be or already are)  

Предположим также, что у меня есть исходный файл MainClass.java в пакете com.mypackage и что структура каталогов в исходной папке в порядке.

Я в каталоге project1 и запускаю:

javac -d bin -sourcepath src src/com/mypackage/MainClass.java  

или

javac -d bin -classpath src src/com/mypackage/MainClass.java  

и я получаю тот же результат. В подробном режиме путь поиска для исходных файлов src в обоих случаях.

Было бы здорово, если бы кто-нибудь мог помочь мне разобраться в специфике этих опций.

4b9b3361

Ответ 1

 -classpath classpath

Задайте путь класса пользователя, переопределив путь класса пользователя в переменной среды CLASSPATH. Если не указан ни CLASSPATH, ни путь -classpath, путь к пользовательскому классу состоит из текущего каталога.

Если параметр -sourcepath не указан, путь к пользовательскому классу ищет исходные файлы, а также файлы классов.

-sourcepath sourcepath

Укажите путь к исходному коду для поиска определений классов или интерфейсов. Как и в случае с дорожкой класса пользователя, записи исходного пути разделяются точкой с запятой (;) и могут быть каталоги, архивы JAR или ZIP-архивы. Если используются пакеты, локальное имя пути в каталоге или архиве должно отражать имя пакета.

Обратите внимание, что классы, найденные через путь к классам, подлежат автоматической перекомпиляции, если их источники найдены.

Ответ 2

  • sourcepath - это корень вашего кода для компиляции
  • classpath может содержать ваш код, а также библиотеки, которые вам нужны.

Ответ 3

CLASSPATH сообщает компилятору и загрузчику классов, где нужно искать файлы .class, в которых он нуждается.

Sourcepath - это то, что я не использую так много. Я считаю, что это необязательно, потому что обычно текущий каталог является исходным. CLASSPATH нет.

Ответ 4

  • classpath ищет файлы класса (.class)
  • Исходный путь ищет исходные (.java) файлы (определения класса или интерфейса .a.k.a)

Однако, если sourcepath НЕ указан, путь к классу ищет файлы классов и исходные файлы.

Это заставляет меня думать, что мы почти всегда можем упростить вещи, используя только путь к классам, и вообще избегаем пути источника.

Люди, которым необходимо использовать как путь к классам, так и путь источника, вероятно, нацелены на странное содержимое каталога. Например, у них может быть папка, содержащая исходные файлы и файлы классов, но только для поиска исходных файлов.