Как скомпилировать Java-программу с .jar-библиотекой
Я не могу заставить javac распознать внешний .jar файл, чьи классы я пытаюсь расширить. У меня есть два файла в одном каталоге: TestConsole.java и acm.jar. Я компилирую из того же каталога, используя следующую команду:
javac -classpath .:acm.jar TestConsole.java
Но похоже, что javac просто игнорирует acm.jar. Это дает мне ошибку:
TestConsole.java:1: package acm does not exist
import acm.program;
^
Конечно, acm.program - это пакет в acm.jar. Все классы в acm.jar уже скомпилированы; Я просто хочу использовать их в своих классах, а не компилировать их.
Что я делаю неправильно?
Я запускаю это на Mac, и структура каталогов acm.jar представляется действительной: она содержит каталог acm/program
, который имеет ConsoleProgram.class
, единственный класс, который TestConsole
расширяется.
javac -classpath ".:acm.jar" TestConsole.java
тоже не работает.
Ответы
Ответ 1
Контрольный список:
-
ваши классы в acm.jar отображаются как:
/ACM программа /CLASSX.class
ACM/программа/CLASSY.class
при декантировании с помощью jar tf acm.jar
-
Вы импортируете их как:
import acm.program.CLASSX;
или
import acm.program. *;
Ответ 2
javac -cp <jar you want to include>;<jar you want to include> <source.java>
<jar you want to include>
, если в том же каталоге указывается только имя jar, если нет, укажите полные или относительные пути
если несколько банок, разделяемых ,
замените ;
на :
на unix
Если возможно, используйте некоторую среду IDE, например Eclipse. Раньше я проводил много времени на подобных вещах, но в промышленности вы вряд ли когда-либо сделаете это таким образом.
Ответ 3
Выполняете ли вы эти команды на компьютере под управлением Windows? В Windows элементы класса path разделяются точкой с запятой, а не двоеточием. Итак:
javac -classpath .;acm.jar TestConsole.java
Другая возможность: структура acm.jar
неверна. Недостаточно, чтобы файлы классов внутри были скомпилированы из файлов, объявляющих package acm.program
- структура пакета также должна быть представлена как иерархия каталогов, поэтому acm.jar
должен содержать каталог acm
и внутри него подкаталог program
который содержит фактические файлы классов для классов, используемых в TestConsole
.
Ответ 4
Я просто добавляю для людей, которые все еще ищут ответ на ту же проблему после успешной компиляции.
Во время компиляции используйте команду, предложенную выше @Michael Borgwardt:
javac -classpath .;acm.jar TestConsole.java
Для выполнения также вам нужно указать путь к классу:
java -classpath .;acm.jar TestConsole