Как подстановочные знаки включают файлы 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 (при условии, что другие настройки верны).