Перейти к содержимому

Как запустить jar на ubuntu

  • автор:

Как установить .jar в Ubuntu

Файл .jar являет собой архив, содержащий некоторое количество файлов программы, которую можно установить, используя Java Development Kit (JDK). По умолчанию, JDK не установлен в Ubuntu, но он доступен в репозиториях и его можно легко установить.

В этом совете мы разберем процесс установки .jar в Ubuntu.

  1. Откройте Терминал.
  2. Установите необходимое программное обеспечение, выполнив в командной строке следующую команду: sudo apt-get install sun-java-6-bin sun-java6-jdk
  3. Согласитесь с появившимся сообщением о Лицензии JDK.
  4. Перейдите в каталог, в котором находится файл jar.
  5. Выполните в командной строке следующую команду, которая позволит установить jar файл: java -jar file.jar заменив слово file на имя устанавливаемого jar-файла.

В результате этих действий вы получите установленный файл jar в Ubuntu.

Остались вопросы?

Если у Вас что-то не получилось или остались вопросы по данной проблеме — обратитесь к автору и он Вам поможет.

Станьте одним из экспертов!

Мы будем рады видеть в своих рядах людей, которые могут поделиться своим опытом с другими!

Linux (Ubuntu,Debian,Fedora), MS Windows (Server/Desktop), PHP.
Решение IT-проблем любой сложности.

Форум русскоязычного сообщества Ubuntu

Страница сгенерирована за 0.052 секунд. Запросов: 23.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Запуск jar файла на linux сервере

Я написал маленький скрипт на java, необходимо запустить на сервере который работает на linux. Я создаю jar файл с помощью IntelliJ IDEA делаю это так (File | Project Structure | Artifacts, artifact, jar —> From modules with dependencies Потом Build | Build artifacts) после через программу putty подключаюсь к серверу и запускаю jar файл, скрипт работает нормально пока окно в котором я запустил jar открыто, но после закрытия окна программы putty, скрипт перестает работать,почему так может происходить ? За ранние прошу прошения за такой странный вопрос я новичок в программировании.

Отслеживать
Николай Гнап
задан 2 мар 2020 в 5:47
Николай Гнап Николай Гнап
399 4 4 серебряных знака 15 15 бронзовых знаков
2 мар 2020 в 6:39
И ещё дубликат: Открыть cmd на сервере через ssh
2 мар 2020 в 6:49
И ещё один: Если ssh внезапно закрывается, как сохранить результаты работы на удалённом хосте?.
2 мар 2020 в 6:49
Спасибо, надо было лучше искать, я просто не знал как правильно спросить в google.
2 мар 2020 в 6:55

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Как вариант, сделайте следующее:

  1. Напишите sudo nano /etc/systemd/system/myapplication.service
  2. Вставьте следующий код, отредактировав его под вашу программу:
[Unit] Description= # можете тут добавить описание программы, если нужно After=syslog.target After=network.target[Service] User= # напишите какой пользователь может пользоваться данной функцией, к примеру root Type=simple [Service] ExecStart=/usr/bin/java -jar /path/to/file/myapplication.jar Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier= # Короткое название вашей программы, например 'myapplication' [Install] WantedBy=multi-user.target 
  1. Закрываем nano командами Ctrl+x далее пишем y или Y и жмем Enter.
  2. Пишем следующюю строку для запуска проекта:
sudo systemctl start myapplication 

Для завершения проекта:

sudo systemctl start myapplication 

Для перезагрузки файла (в случае остановки/ошибки/обновлении файла):

sudo systemctl restart myapplication 

Для просмотра статуса запуска:

sudo systemctl status myapplication 

Запуск Java классов и JAR-ов не по учебнику

Меня давно занимала мысль как в Linux-е запускать программы на Java без вспомогательных Bash скриптов. Я не видел приемлемого решения, если не считать способ «bash script payload», когда в конец скрипта помещается бинарный файл.

Но на прошлой неделе случайно наткнулся на модуль ядра binfmt_misc, с помощью которого можно перехватить исполнение файла по его magic number. Для этого через update-binfmts добавляется собственный обработчик для получения имени исполняемого файла и аргументов пользователя.

Первое открытие

Как оказалось в моей Ubuntu 16.04 уже зарегистрирован обработчик для JAR файлов:

update-binfmts --display . jar (enabled): package = openjdk-8 type = magic offset = 0 magic = PK\x03\x04 mask = interpreter = /usr/bin/jexec detector = 

Отдав команду chmod +x foo.bar я радостно потирал руки, но реальность оказалось сурова — запуск ./foo.jar выдал следующее:

invalid file (bad magic number): Exec format error 

Погуглив, я нашел обросший мхом баг bugs.java.com/bugdatabase/view_bug.do?bug_id=6401361 Как оказывается сборка через Maven не добавляет «0xcafe» в начало JAR файла. Не менее безответственно ведет себя и плагин maven-assembly-plugin. Что не нравится /usr/bin/jexec, зарегистрированному обработчику по умолчанию.

Погуглив еще, я нашел решение проблемы через установку пакета jarwrapper. После установки добавляется новый обработчик /usr/bin/jarwrapper и страховка /usr/bin/jardetector (проверяет по META-INF что это действительно JAR). Но изучив код обработчика мне не понравилась куча лишней работы, которую делает скрипт запуская множество вспомогательных программ.

Поэтому решением стал собственный обработчик:

#!/bin/sh #/usr/bin/jarinvoke JAR=$1 shift exec java -jar $JAR $@ 

Дальше открываем файл sudo gedit /var/lib/binfmts/jar и регистрируем обработчик заменив строчку с /usr/bin/jexec на /usr/bin/jarinvoke. На самом деле это плохое решение и лучше создать собственную группу (об этом ниже), но для первичного понимания сойдет.

Для вступления изменений в силу может потребоваться выполнить:

sudo update-binfmts --disable jar && sudo update-binfmts --enable jar 

После чего можете запускать JAR файлы как любые другие исполняемые файлы.

Исполняемые классы

Теперь можно идти дальше и сделать из Java классов исполняемые файлы, где jarwrapper не сможет помочь. Обработчик будет работать только для классов с пакетом по умолчанию (т.е. классы с отсутствующим package заголовком). Может можно сделать и лучше, но мне хватило такой функциональности для «скриптования» на Java:

#!/bin/sh # /usr/bin/clsinvoke CLASS_FILE=$1 shift ABSOLUTE_PATH=`readlink -f $CLASS_FILE` CLASS=`basename $ABSOLUTE_PATH` CLASS=$ CLASSPATH=`dirname $ABSOLUTE_PATH` exec java -cp $CLASSPATH $CLASS $@ 

После чего регистрируем собственный обработчик (этим же способом можно создать новый обработчик для JAR-ов не редактируя /usr/bin/jexec):

sudo update-binfmts --package clsinvoke --install clsinvoke /usr/bin/clsinvoke --magic '\xca\xfe\xba\xbe' 
public class HelloWorld < public static void main(String[] args) < System.out.println("Hello, World"); >> 
javac HellWorld.java chmod +x HelloWorld.class ./HelloWorld.class Hello, World 

Можно пойти и дальше, сделав более сложный обработчик, который по импорту классов будет определять какие библиотеки добавить в CLASSPATH из ~/.m2, но это отдельная история. Сейчас интересен взгляд со стороны, замечания, дополнения, если таковые есть. После чего думаю оформить это в deb пакет и выложить всё на гитхабе.

  • Java
  • Разработка под Linux

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *