Как подстановочные знаки включают файлы JAR при компиляции?
В java файле (MyRtmpClient.java) есть следующее:
import org.apache.mina.common.ByteBuffer;
и ByteBuffer
находится внутри JAR файла (с правильной структурой каталогов, конечно).
Этот файл jar и другие, которые мне нужны, находятся в том же каталоге, что и файл .java.
Затем я скомпилирую строку:
javac -cp ".;*.jar" MyRtmpClient.java
Но я получаю ошибку:
MyRtmpClient.java:3: package org.apache.mina.common does not exist
import org.apache.mina.common.ByteBuffer;
Как включить файлы jar в свой проект?
Ответы
Ответ 1
ваша командная строка верна, но есть некоторые соображения:
- у вас должен быть javac >= 1.6, потому что только в этой версии компилятор анализирует "*" как различные JAR файлы.
- вы должны запускать Windows, потому что ";" это разделитель путей только для этой операционной системы (он не работает в Unix, разделитель путей в Unix - ":" ).
Я предполагаю, что JAR файл имеет правильную структуру каталогов, как вы заявили.
Ответ 2
javac не понимает *.jar в аргументе pathpath. Вам нужно явно указать каждую банку. например.
javac -cp ".;mina.jar" MyRtmpClient.java
Ответ 3
В вашем случае, я думаю, JAVAC не может найти файл jars.
Попробуйте:
project_path
- lib\a.jar
- src\package\b.java
cd @PROJECT_PATH
javac -classpath lib\a.jar src\package\b.java
Ответ 4
В javac JDK 6 и выше Вы можете использовать (отсутствие заметки .jar):
javac -cp ".;*" MyRtmpClient.java
чтобы процитировать javac - компилятор языка программирования Java
В качестве особого удобства элемент пути класса, содержащий базовое имя *, считается эквивалентным заданию списка всех файлов в каталоге с расширением .jar или .JAR.
Например, если каталог foo содержит a.jar и b.JAR, то элемент пути класса foo/* будет расширен до A.jar; b.JAR, за исключением того, что порядок файлов jar не указан. Все файлы jar в указанном каталоге, даже скрытые, включены в список. Элемент classpath, состоящий просто из *, расширяется до списка всех файлов jar в текущем каталоге.
Ответ 5
Если у вас есть утилиты find
и tr
в вашем распоряжении (например, вы работаете с Linux), вы можете сделать:
javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.java
Все файлы jar в текущем каталоге и все его подкаталоги будут добавлены (команда оболочки перечисляет все файлы jar и помещает двоеточия в качестве разделителей между ними).
Объяснение:
- пара обратных шагов (`) обозначает команды оболочки, которые должны быть выполнены,
-
find * -name "*.jar"
находит и перечисляет все файлы jar в иерархии, корень которых является текущей папкой,
- вертикальная полоса (|) - это труба; подключает вывод
find
к входу следующей команды,
-
tr "\n" ":"
заменяет все символы новой строки символами двоеточия.
Ответ 6
Вероятно, ниже синтаксиса будет работать над командой windows dos
javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.java
Ответ 7
В Java 8 опция ". * *" и т.д., которые упомянуты выше, похоже, не работают. Я пробовал и обнаружил, что:
javac -cp '<location of jars>/*' MyRtmpClient.java
работает:
<location of jar>
может быть /usr/local/classes/ * или/home/developer/MyProject/*
Ответ 8
попробуйте включить файл jar в командной строке, чтобы:
javac MyRtmpClient.java ByteBuffer.jar
Ответ 9
Вы не можете использовать -cp
с Javac. Вместо этого вы должны использовать -classpath
(при условии, что другие настройки верны).