Как включить файлы jar с файлом java и скомпилировать в командной строке


121

У меня есть 3 файла jar и файл .java, который зависит от этих файлов jar. Как мне скомпилировать файл .java с этими файлами jar с помощью командной строки?


9
введите "javac -help"
Шон Патрик Флойд


2
надеюсь, это поможет вам ..
Fahim Parkar

2
Примечание для себя: вы должны использовать флаг -cp / -classpath перед именем java-файла, который вы хотите запустить, иначе он проигнорирует флаг. java -cp ".;magic.jar" Fooнормально java Foo -cp ".;magic.jar"нет.
Дмитрий

Ответы:


108

Вы можете включить ваши jar-файлы в команду «javac», используя параметр «-cp».

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

Вместо -cp вы также можете использовать -classpath

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

Вы можете включать jar-файлы каждый раз при компиляции, правильно установив переменную среды «CLASSPATH». Переменная среды будет хранить путь, по которому jar-файлы и классы должны использоваться для компиляции / выполнения любого java-файла. Вам не нужно будет включать jar-файлы по отдельности каждый раз при компиляции файла.

На разных машинах есть разные методы установки пути к классам в качестве переменной среды. Команды для Windows, Linux и т. Д. Разные.

Вы можете найти более подробную информацию в этом блоге .

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html

7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javaработал у меня. Я использовал Mac. Я где-то читал, что ':' используется для unix.
Шри

2
Я использовал эту команду, но при попытке получить доступ к классу, присутствующему в файле jar, я получаю ClassNotFoundException.
Мохаммед Рампуравала

3
что .:делать? извините, если это глупый вопрос, но для меня это не очевидно.
Миранда

1
@kensen. Опечатка. замените: (двоеточие) точкой с запятой (;)
Панкадж Шинде

Выше у меня не работало на Ubuntu. Я пробовал без кавычек, и это сработало. Ex. javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Альфаз Джикани

24

Пожалуйста, попробуйте в Linux

javac -cp jarfile source file 

ПРИМЕР :-

javac  -cp .:/jars/* com/template/*.java

Когда я пробую ПРИМЕР: - с .:/jarsзаменой на каталог, в котором находятся мои файлы JAR, я получаю сообщение об ошибке javac: invalid flag: /location/of/first/jar/file.jar.
Артуро дон Хуан

stackoverflow.com/questions/27915204/… сослаться на это, это может решить вашу проблему,
Джамшир

20

Синтаксис будет работать с командой Windows dos:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java

4
После успешного выполнения вышеуказанной команды, как запустить файл класса Java?
Yash Agrawal

java -cp first.jar: second.jar: third.jar MyFile
Кришна Чайтанья

15

Попробуйте добавить все jar-файлы зависимостей в путь к классу с помощью настроек переменных среды или выполните следующие действия:

  1. Откройте командную строку.
  2. Перейдите в каталог, в котором находится файл Java, который вы хотите скомпилировать.
  3. Задайте путь к классам для файлов jar зависимостей, как показано ниже:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. Теперь вы можете скомпилировать свой файл java. (команда: javac YourJavaFile.java)

Надеюсь, это решит вашу проблему с зависимостью.


15

Ниже приведены шаги,

  1. Скопируйте все jar-файлы и ваш .java-файл в одну папку (вместо длинного пути будет проще указать имена файлов. Хотя вы можете хранить jar и .java в отдельных папках).

  2. Компилировать,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. Выполнить,

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

Надеюсь, это поможет!


1
Спасибо, что также показали, как выполнять. Что снова делает точка двоеточия? Это текущий каталог и разделитель файлов?
ThisClark

Да, это текущий каталог и разделитель файлов Unix (в Windows это точка с запятой).
MathuSum Mut

6

Это создаст файл .class:

javac -classpath "[jarname with specified path]" [java filename]

Это выполнит файл класса:

java -cp [jarname with specified path]: [java filename]

1
Команда java показывает ошибку Вызвано: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory Я хочу скомпилировать ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javaи ** запустить java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Яш Агравал


2

Вам необходимо указать зависимости во время компиляции, а также во время выполнения

Для компиляции используйте этот формат

javac -cp "*.jar;classfile_path" filename.java

Пример:

javac -cp "ojdbc6.jar;c:\programs" Main.java

Этот ответ, хотя и правильный, на самом деле, похоже, не добавляет ничего, о чем еще не говорят другие ответы. Если есть какое-то ключевое различие между этим и другими ответами, было бы лучше объяснить, почему ваш ответ отличается.
DaveyDaveDave

Вы упомянули указание зависимостей во время выполнения, а также во время компиляции, но не объяснили, как указать их во время выполнения.
Майкл Фултон

1

несколько раз выполняются следующие изменения:

java -cp ".;%CLASSPATH%" classfilename 

Примечание: В Windows. Для linux используйте $CLASSPATHвместо этого.


1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java

5
Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста , измените свой ответ , чтобы добавить объяснения и дать указание о том , что применять ограничения и допущения.
двойной звуковой сигнал

0

Если вы используете Ubuntu:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

Перейти в папку (вне структуры пакета)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

Примечание. Просмотрите расположение файлов и имена пакетов.


-1

Для окон

  1. подключитесь к каталогу, в котором файлы java присутствуют в командной строке.
  2. установить путь к классам (здесь d = имя папки) установить classpath = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. нажмите ввод и
  4. теперь скомпилируйте файл java javac filename.java
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.