Выполнить файл .jar из программы Java

Как я могу запустить локальный файл jar из java-программы?

Файл jar не находится в пути к классам вызывающей программы Java.


person vfgjrk    schedule 08.02.2011    source источник


Ответы (9)


Я предлагаю вам использовать ProcessBuilder и запустить новая JVM.

Вот кое-что, с чего можно начать:

ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
person aioobe    schedule 08.02.2011
comment
@aioobe Могу ли я интегрировать System.out в исходную программу? извините за вопрос, но я новичок в java - person vfgjrk; 08.02.2011
comment
Не уверен, что понимаю ваш комментарий, но вы получаете ответ Process от start(), который предоставляет вам getInputStream / getOutputStream. - person aioobe; 08.02.2011
comment
Извините еще раз .. а если бы я хотел передать параметр в банку, как я? - person vfgjrk; 08.02.2011
comment
Вы просто добавляете больше аргументов в конструктор ProcessBulider: new ProcessBuilder("/path/to/java", "-jar", "your.jar", "arg1", "arg2"); - person aioobe; 08.02.2011

Другой способ сделать на окнах:

Runtime.getRuntime().exec("cmd /c start jarFile");

таким образом вы также можете установить приоритет вашего процесса (нормальный/низкий/и т. д.)

person Johnydep    schedule 03.02.2012

Во-первых, описание вашей проблемы немного непонятно. Я не понимаю, хотите ли вы загружать классы из файла jar для использования в своем приложении, или jar содержит основной файл, который вы хотите запустить. Я предполагаю, что это второе.

Если это так, у вас есть много вариантов здесь. Самый простой из них будет следующим:

String filePath; //where your jar is located.
Runtime.exec(" java -jar " + filepath);

Вуаля... Если вам не нужно запускать файл jar, а загружать из него классы, дайте мне знать.

person Nikola Yovchev    schedule 08.02.2011
comment
Пожалуйста, втяните себя (пинайтесь и кричите, если нужно) в возможности Java 1.5 и ProcessBuilder. - person Andrew Thompson; 08.02.2011
comment
Это решение будет делать то же самое, что и ProcessBuilder (за исключением случаев, когда вы хотите закрыть и т. д.), и вам нужно печатать меньше. В моем случае мне понадобится лаунчер, который закрывается после открытия банки, так что мне этого достаточно. - person Klaider; 13.07.2017
comment
Имейте в виду, что теперь ProcessBuilder является рекомендуемым способом вызова двоичного файла и что в java 9 появятся новые улучшения: javaworld.com/article/3176874/java-language/. Уже есть статья, в которой обсуждается разница между средой выполнения и ProcessBuilder: исполняемая среда выполнения"> stackoverflow.com/questions/6856028/. - person Nikola Yovchev; 14.07.2017
comment
Этот подход не будет работать, если вам нужно указать рабочий каталог. Мне помог ProcessBuilder (как было предложено в ответе выше). - person Andrey Kotov; 24.03.2019

Может ли что-то вроде следующего быть полезным?

http://download.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html

person Chris Dennett    schedule 08.02.2011

Вы можете запустить файл jar из любого места, используя только этот код строки.

    Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));

где

new File("your path to jar")

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

Спасибо.

person Syeda Zunaira    schedule 12.02.2015

  1. Добавьте библиотеку jar в свой проект
  2. Импорт основного класса (см. манифест в файле jar)
  3. Вызвать статический метод main с аргументами

    String args[] = {"-emaple","value"};
    PortMapperStarter.main(args);
    
person Иван Александров    schedule 07.07.2017

Чтобы запустить исполняемый файл jar из вашего Java-приложения, вы можете скопировать JarClassLoader из https://docs.oracle.com/javase/tutorial/deployment/jar/examples/JarClassLoader.java

Используйте это так. В этом фрагменте jarUrl — это URL-адрес для загрузки jar, например, file:/tmp/my- jar.jar и args — это массив строк, которые вы хотите передать в качестве аргументов командной строки в банку.

JarClassLoader loader = new JarClassLoader(jarUrl);
String main = loader.getMainClassName();
loader.invokeClass(main, args);

Имейте в виду, что сейчас вы вставляете чужой двоичный код в свой код. Если он застревает в бесконечном цикле, ваш поток зависает, если он вызывает System.exit(), ваша JVM завершает работу.

person Mzzl    schedule 08.03.2019

1) Установите путь к классу из переменных среды

2) Перейдите в папку, где находится ваш файл jar.

3) Запустите следующие команды через командную строку

java -jar имя_файла_банки

person venkatram mutyala    schedule 17.01.2013
comment
Вопрос в том, как запустить файл jar из программы, а не в том, как это сделать из командной строки. - person Henrik Aasted Sørensen; 17.01.2013

person    schedule
comment
Пожалуйста, используйте System.err.println(new String(c)); для печати сообщений об ошибках. - person Nitin Mahesh; 12.01.2017