Как сделать javac найти файлы JAR? (Eclipse может их видеть)

Когда я в Eclipse, мой проект компилируется без ошибок, однако, когда я пытаюсь скомпилировать с javac, он говорит, что мне не хватает некоторых пакетов...

Я скопировал команду компиляции и текст ниже:

javac -classpath lib/ -d bin/ src/*.java
src/Cleaner.java:5: package net.sourceforge.jgeocoder does not exist
src/MyUtilities.java:19: package org.apache.commons.codec.binary does not exist

В Eclipse я добавил все файлы .JAR в путь сборки, и программа компилируется просто отлично.

Почему он не может найти банки, когда я использую javac вместо Eclipse IDE?

Ответы

Ответ 1

-classpath lib/ заставит javac искать дерево файлов классов в lib. Если у вас есть JAR-архивы, вы должны использовать -classpath lib/*.jar - и, вероятно, использовать любой механизм экранирования, который ваш CLI имеет на *, чтобы убедиться, что он достигает javac, а не расширяется CLI

Смотрите ссылку javac command (windows).

Ответ 2

Существующий ответ, столь же информативный, все еще оставлял меня в недоумении, нужно переходить к документам javac -classpath. Здесь вы можете узнать, что вам нужно знать:

javac -cp "lib/" Example.java загрузит все .class файлы в lib/.
javac -cp "lib/\*" Example.java загрузит все .jar файлы в lib/, но не файлы .class.
javac -cp "lib/;lib/\*" Example.java загрузит все файлы .jar и .class в lib/.

Примечания:

  • Символ * (wildcard), используемый в приведенных выше примерах, экранируется (обратите внимание на \ до *). \ для bash, если вы используете что-то другое, это может быть иначе. Вы хотите избежать этого, потому что утилиты java sdk, например javac, имеют собственный способ интерпретации шаблона. Насколько я могу судить (исправьте меня, если я ошибаюсь), командная строка Windows не расширяет *, поэтому вам не нужно ее избегать: -cp lib\* должно быть хорошо.
  • ; разделяет пути, как в javac -cp ".;a/;b/;c/" Example.java - это загружает файлы .class в следующие каталоги: текущий каталог, a, b и c.
  • Окружать classpath кавычками (например, в примерах) при использовании разделителей (;).