2013-04-24 2 views
3

Что такое пункт javac -sourcepath?Разница между исходным файлом и просто указанием исходного файла?

Скажите у вас есть файл Ball.java, и файл Eight.java, кажется, нет никакой разницы между работой:

javac Eight.java lib/pool/Ball.java 

и

javac Eight.java -sourcepath lib 

Путь к папкам имеет смысл для меня, как это означает, что вам просто нужно распространять файлы классов для разработчиков, которым не нужно будет связываться с источником, но я думаю, что у вас может быть только источник/источник, если это ваш собственный/внутренний проект, поэтому он не может понять почему это необходимо.

У людей есть большие хранилища исходного кода вместо классов?

Из дальнейшего тестирования я подтвердил, что -sourcepath даже не учитывает последнюю измененную дату источника, такую ​​как путь к классам, поэтому даже не мог сэкономить время во время строительства. Как и при использовании -classpath, он будет создавать файл .class, если он не существует, а источник - или, если файл .java является более новым, чем файл .class, тогда как любые исходные файлы на пути к исходному файлу будут построены снова безотносительно о том, насколько они новы. И когда заданы -sourcepath и -classpath, тогда требуется, чтобы действие пути к классам восстанавливалось только в том случае, если исходные файлы новее, поэтому указание пути источника и пути к классам кажется совершенно бессмысленным. Я также проверил, что -sourcepath и -classpath создают только необходимые исходные файлы, необходимые для разрешения. Единственный недостаток от -sourcepath в отношении указания конкретных .java-файлов, которые я могу найти, заключается в том, что sourcepath просто должен иметь указанный каталог, и любые файлы jar или zip автоматически извлекаются.

Итак, точка -sourcepath из-за лень (не желая извлекать & указать все исходные файлы)? И есть ли какой-либо потенциал для использования -sourcepath over -classpath? Так как они, похоже, делают то же самое, но classpath лучше всего работает, экономя время, когда источник не нуждается в перестройке.

ответ

0

Я нашел от других коллег в разработке, что они обычно используют это во время разработки, если они хотят построить часть проекта или подпроекта. Вместо того, чтобы строить все с нуля (что может занять несколько часов), вместо этого они просто хотят создать несколько проектов, тогда они могут указать другие каталоги всего проекта в -sourcepath, чтобы это могло разрешать классы. Это означает, что он может автоматически находить нужные зависимости и строить их по мере необходимости.

Мне также сообщили, что это может быть полезно во время сборки maven, поскольку порядок сбора зависимостей может быть очень неорганизованным. Вместо того, чтобы иметь недостающие зависимости, потому что банок там нет во время построения, вы можете указать все дерево кода как путь к исходному файлу. Хотя я думаю, что это не лучший совет, это полезно, когда у кого-то возникают проблемы.

1

Путь к исходному файлу используется для поиска .java-файлов для классов, на которые ссылаются файлы, которые вы запросили для компиляции (Eight.java в вашем примере), для которых нет .class-файла. Компилятор также автоматически скомпилирует их. Я не уверен, что он сравнивает измененное время .java и соответствующий файл .class и перекомпилирует .java, если он новее, но я думаю, что это так.

+0

Да, другое отличие, которое я обнаружил при тестировании, заключается в том, что classpath будет искать файлы .class и .java для разрешения и будет строить источник, если файл .class не существует или файл .java имеет модифицированное время больше, чем файл .class.В то время как sourcepath будет перекомпилировать источник каждый раз, независимо от последней измененной даты. Я просто пытался выяснить по этой причине, есть ли различия между указанием каталога для sourcepath и явным указанием, что вы хотите, чтобы точный файл, созданный javac – lavamunky