Различия между параметрами 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
в обоих случаях.
Было бы здорово, если бы кто-нибудь мог помочь мне разобраться в специфике этих опций.
Ответы
Ответ 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 НЕ указан, путь к классу ищет файлы классов и исходные файлы.
Это заставляет меня думать, что мы почти всегда можем упростить вещи, используя только путь к классам, и вообще избегаем пути источника.
Люди, которым необходимо использовать как путь к классам, так и путь источника, вероятно, нацелены на странное содержимое каталога. Например, у них может быть папка, содержащая исходные файлы и файлы классов, но только для поиска исходных файлов.