Как сделать 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 кавычками (например, в примерах) при использовании разделителей (
;
).