Импорт, банки и сердце болит
Прежде всего позвольте мне начать с того, что я совершенно новичок в Java, но чтобы дать вам представление о том, насколько новы; Я начал читать много книг, примеров и так далее, и начал программировать на Java с использованием Eclipse около 2 месяцев назад. Тем не менее, я нашел очень классный совет по использованию блокнота и терминала для программирования. В некотором роде сумасшедший для новичка, чтобы пройти трудный путь, но я люблю вызов, и я серьезно отношусь к обучению.
Итак, в Eclipse я действительно хорошо разбирался в том, как импортировать, добавлять jars-компиляцию и т. Д. Когда я начал использовать pico и использовать терминал (я использую ubuntu) для компиляции, все прошло очень хорошо, пока я не захотел использовать пакеты. Я потратил два дня на то, чтобы вырвать мои волосы, потому что, что бы я ни делал, я не могу этого понять.
Я пытаюсь использовать acm.jar (который у меня есть много раз в Eclipse), однако я полностью потерян, как использовать его при компиляции из javac в терминале.
Итак, я прошу, чтобы кто-то объяснил, как заставить мой jar-файл работать.
Все, что я использую для создания своих Java-программ - это пико (или блокнот) и javac в терминале.
2 ответа
Предполагая, что ваши исходные файлы находятся в src
, Предполагая, что вы хотите, чтобы ваши скомпилированные классы были в classes
, Предполагая, что ваши исходные файлы ссылаются на классы, которые находятся в lib/acm.jar
:
javac -cp classes:lib/acm.jar -d classes src/com/foo/bar/MyClass.java
скомпилирует класс com.foo.bar.MyClass
и положить сгенерированный MyClass.class
файл в classes/com/foo/bar
,
Вам нужно acm.jar
файл в пути к классам. Вот что -cp lib/acm.jar
вариант делает. Вам также нужно classes
в classpath, потому что MyClass, вероятно, ссылается на другие классы, которые вы уже скомпилировали и которые находятся в вашем classes
каталог.
Чтобы запустить ваш класс, он должен быть в classpath, а также в acm.jar:
java -cp classes:lib/acm.jar com.foo.bar.MyClass
Как видите, classpath содержит файлы JAR и каталоги, содержащие иерархию папок, которая соответствует иерархии пакетов.
Я бы не стал использовать javac из командной строки напрямую. Попробуйте использовать настоящий инструмент для сборки, который соберет все ваши классы одновременно, например, Gradle или Ant. Maven также очень популярен, но я ненавижу это со страстью.
Чтобы скомпилировать и запустить класс Java с использованием внешних библиотек, вы должны добавить эту библиотеку в путь к классам. Путь к классам - это набор мест, где компилятор java и JVM ищут все внешние библиотеки / классы, которые ему нужны в процессе компиляции / выполнения.
Установка пути к классу может быть выполнена двумя способами:
- Установите переменную среды с именем CLASSPATH
- Установите его, когда вы запускаете javac/java
Установка classpath при запуске javac/java выполняется следующим образом:
javac -cp path/to/jar1:path/to/jar2:path/to/jar3:path/to/dirContainingClasses
yourMainClass.java
Бежать:
java -cp path/to/jar1:path/to/jar2:path/to/jar3:path/to/dirContainingClasses
yourMainClass
: используется как разделитель в Linux, для окон;