Как заставить javac находить JAR-файлы?(Затмение может видеть их) - PullRequest
19 голосов
/ 25 августа 2011

Когда я в 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?

Ответы [ 2 ]

17 голосов
/ 25 августа 2011

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

См. Справочник команд javac (windows) .

14 голосов
/ 19 августа 2014

Существующий ответ, какой бы информативный он ни был, все еще заставлял меня задуматься о необходимости просмотра документации по 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/.

Примечания:

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