Как запустить java приложение в виде jar файла
Последнее время все чаще встречаются программы сделанные в виде jar файла, вот только по двойному клику на значке из под виндов они редко запускаются.
Для примера возьмем программу TimeFlow доступную для загрузки по адресу https://github.com/FlowingMedia/TimeFlow/downloads,
загрузим и распакуем зип архив в любую папку.
Дальнейшие действия с jar файлом предполагают что виртуальная ява машина уже установлена в системе. Дальнейшие инструкции предполагают что работаем с ОС виндовс.
В распакованной папке рядом с файлом timeline.jar создадим еще один файлик и назовем его start.bat
Запишем в него следующую строку
javaw -jar timeline.jar
Сохраняем файл, и теперь старуем программу через файлик start.bat Все должно работать.
Алгоритм работы файла запускающего java приложение в виде jar файла следующий.
- Запустить среду выполнения под виндовс
- Распаковать файл
- Запустить распакованное содержимое.
В приложения к статье добавлен пример приложения запускающего java программу в виде jar архива и готовый bat файл из примера к статье.
Просьба оставлять предложения, вопросы и пожелания по программе в комментариях к данной статье.
Запуск программ Java в сборке Maven
Плагин exec в Maven позволяет выполнять системные и Java-программы из командной строки maven.
У данного плагина есть две цели:
- exec:exec — выполняет любую программу в отдельном процессе.
- exec:java — может запускать программы Java на той же виртуальной машине.
В этом руководстве мы узнаем, как использовать цель exec:java для запуска программы Java в сборке maven.
1: Настройка плагина в pom.xml
Если вы хотите использовать какой-либо плагин maven, вам нужно настроить его в разделе сборки pom.xml. Просто добавьте приведенную ниже конфигурацию плагина в файл проекта pom.xml.
plugin> groupId>org.codehaus.mojogroupId> artifactId>exec-maven-pluginartifactId> version>1.6.0version> configuration> mainClass>com.journaldev.maven.utils.BuildInfomainClass> configuration> plugin>
Наиболее важным моментом, на который следует обратить внимание, является элемент mainClass внутри configuration . Здесь мы указываем класс Java, который будет выполняться целью exec:java.
Вот содержимое класса Java. Это простой класс, в котором мы выводим сведения о версии Java и текущее время.
package com.journaldev.maven.utils; import java.time.LocalDateTime; public class BuildInfo public static void main(String[] args) String javaVersion = Runtime.version().toString(); String time = LocalDateTime.now().toString(); System.out.println("********\nBuild Time: " + time + "\nJava Version: " + javaVersion + "\n********"); > >
2: Запуск сборки maven с целью exec:java
Если мы запустим сборку maven с целью exec:java, мы получим следующий результат:
$ mvn exec:java [INFO] Scanning for projects... [INFO] [INFO] --------------- com.journaldev.maven:maven-example-jar >--------------- [INFO] Building maven-example-jar 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ maven-example-jar --- ******** Build Time: 2020-01-10T12:44:17.718061 Java Version: 13.0.1+9 ******** [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.591 s [INFO] Finished at: 2020-01-10T12:44:17+05:30 [INFO] ------------------------------------------------------------------------ $
Создание запуска приложения java для «недалеких» пользователей
Есть jar-архив с приложением java. Нужно сделать так, чтоб пользователь мог запускать приложение не из командной строки, а просто кликнул по ярлыку и всё запустилось (под винду). Как это сделать? Написать и скомпилировать программу например на C#, которая будет делать java -jar app.jar?
Отслеживать
задан 1 фев 2012 в 5:53
Виталий Кустов Виталий Кустов
1,841 1 1 золотой знак 16 16 серебряных знаков 37 37 бронзовых знаков
6 ответов 6
Сортировка: Сброс на вариант по умолчанию
создаем runjar.bat файл следующего содержания:
на windows 7 сделал так: Start -> Default Programs -> Associate a file type or protocol with a program
для jar файла указываем путь к runjar.bat файлу.
jar file для проверки:
META-INF\MANIFEST.MF HelloWorld.class
Manifest-Version: 1.0 Class-Path: . Main-Class: HelloWorld
import javax.swing.JFrame ; public class HelloWorld < public static void main ( String[] args ) < JFrame f = new JFrame ( "Hello world" ) ; f.setSize ( 200, 200 ) ; f.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ; f.setVisible ( true ) ; >>
Отслеживать
ответ дан 2 фев 2012 в 13:12
6,252 16 16 серебряных знаков 21 21 бронзовый знак
Можно просто написать bat-файл, например, start.bat, а в нём то, что Вы и написали java -jar .jar
Отслеживать
ответ дан 1 фев 2012 в 7:49
561 2 2 серебряных знака 6 6 бронзовых знаков
Это решение я нашел, и скорее всего им и воспользуюсь. Но хотелось бы чтоб на каждой машине этот bat создавался автоматически. Как это сделать? Инсталлятор какой то нужен. Какие решения практикуются на сегодняшний день? Чтоб юзер установил, как любую софтину и пользовался. Пусть даже только из винды. Хотя если писать инсталлятор, то можно генерить либо bat либо sh файл под *nix
Как из Java приложения запустить другую программу?
Самый простой и базовый способ – с помощью метода Runtime.getRuntime().exec() . В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк «имя=значение» . Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.
Рекомендуемый, и более управляемый способ – использование класса ProcessBuilder . Он же применяется внутри метода exec . Билдер дает, например, средства для использования в команде пайплайнов и редиректов ввода-вывода.
В результате запуска команды создается объект класса Process . Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle . Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.
Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
