Почему я должен использовать: классы :. запись после jar в аргументе -classpath? - PullRequest
0 голосов
/ 19 марта 2019

Я читаю какую-то книгу по продвинутому Java и мне поручено скомпилировать файл .java с помощью следующей команды:

javac -d classes -classpath c:\somepath\somejar.jar;classes:.

Интересно:

  1. Являются ли :. эти символы символами одного аргумента или : и . отдельно являются разными аргументами после ключевого слова classes? что они обозначают?
  2. Почему нам нужно предоставить classes:. вообще после somejar.jar? как все эти комбинации:
    javac -d classes -classpath c:\somepath\somejar.jar;classes:.
    javac -d classes -classpath c:\somepath\somejar.jar;classes:
    javac -d classes -classpath c:\somepath\somejar.jar;classes
    javac -d classes -classpath c:\somepath\somejar.jar;

работают абсолютно одинаково. Они генерируют точно такие же файлы .class (по 226 байт каждый), и когда я развертываю их в веб-контейнере, они работают одинаково.

Так какой смысл в этих символах? Чем выше четыре javac .. команды отличаются? Кто-нибудь, кто может объяснить это ясно, пожалуйста?

1 Ответ

0 голосов
/ 19 марта 2019

Разделители ; и :, используемые в значении classpath, используются для разделения нескольких папок в качестве значений classpath.

; используется для разделения папок в ОС Windows.

: используется для разделения папок в * nix ОС.

Аргумент -d classes в сочетании с classes:. подразумевает, что скомпилированные файлы .class будут помещены в папку классов вместо стандартного размещения на основе иерархии пакетов.

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

Единственная проблема здесь - это смешивание двух типов разделителей. Почему это делается - я не знаю.

Ссылки:

...