Различия между параметрами classpath и sourcepath в javac - PullRequest
34 голосов
/ 14 марта 2010

Я прочитал документацию 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.

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

Ответы [ 4 ]

24 голосов
/ 14 марта 2010
 -classpath classpath

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

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

-sourcepath sourcepath

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

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

9 голосов
/ 14 марта 2010
  • sourcepath - где находится корень вашего кода для компиляции
  • classpath может содержать ваш код, а также библиотеки, которые вам нужны
4 голосов
/ 14 марта 2010

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

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

2 голосов
/ 22 января 2016
  • ищется classpath для файлов классов (.class)
  • В sourcepath ищутся исходные файлы (.java) (класс или интерфейс .a.k.a определения )

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

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

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

...