Как скомпилировать программу Java с библиотекой .jar - PullRequest
15 голосов
/ 20 мая 2011

Я не могу заставить 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 тоже не работает.

Ответы [ 5 ]

23 голосов
/ 20 мая 2011
javac -cp <jar you want to include>;<jar you want to include> <source.java> 

<jar you want to include> если в том же каталоге, просто имя jar будет делать, если нет, указать полный или относительный путь

если более одной банки, отделите с помощью ,

заменить ; на : на unix

Если возможно, используйте некоторую IDE, например Eclipse. Раньше я проводил много времени с подобными вещами, но в промышленности вы вряд ли когда-либо сделаете это таким образом.

6 голосов
/ 20 мая 2011

Вы запускаете эти команды на компьютере с Windows?В Windows элементы пути к классам разделяются точкой с запятой, а не двоеточием.Итак:

javac -classpath .;acm.jar TestConsole.java

Другая возможность: структура acm.jar неверна.Недостаточно, чтобы файлы классов внутри были скомпилированы из файлов, которые объявляют package acm.program - структура пакета также должна быть представлена ​​в виде иерархии каталогов, поэтому acm.jar должен содержать каталог acm и в этом подкаталоге programсодержит фактические файлы классов для классов, используемых в TestConsole.

3 голосов
/ 20 мая 2011

Контрольный список:

  1. ваши классы в acm.jar отображаются как:

    acm / program / CLASSX.class

    acm / program / CLASSY.class

    при декантации с помощью jar tf acm.jar

  2. Вы импортируете их как:

import acm.program.CLASSX;

или

import acm.program. *;

1 голос
/ 03 сентября 2018

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

Нет проблемвопрос - точка с запятой после каждого пакета.Я не уверен насчет Mac или Linux, но для командной строки Windows это был случай

javac -cp mysql-connector-java-8.0.12.jar; Testing.java

java -cp mysql-connector-java-8.0.12.jar; Testing

Должен следовать как при компиляции, так и при запуске.

0 голосов
/ 31 марта 2017

Я просто добавляю людей, которые все еще ищут ответ на ту же проблему после успешной компиляции.

При компиляции используйте команду, предложенную выше @Michael Borgwardt:

javac -classpath .;acm.jar TestConsole.java

Для выполнения также необходимо указать путь к классу:

java -classpath .;acm.jar TestConsole
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...