Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Linux как запустить jar файл


работа с jar-архивами из консоли Linux

Извлечение объектов из архива

Распаковать архив ojdbc14-10.2.0.4.jar в текущую директорию:

$ jar xf ojdbc14-10.2.0.4.jar

Ключи:

-xextract, распаковать;
-ffile, файл, который необходимо распаковать;

В результате получим содержимое архива:

$ ls -1 META-INF ojdbc14-10.2.0.4.jar oracle

Извлечь только определённый файл или каталог, например — только папку oracle из архива ojdbc14-10.2.0.4.jar:

$ jar xf ojdbc14-10.2.0.4.jar oracle/
$ ls -1 ojdbc14-10.2.0.4.jar oracle

Извлечь только определённый файл:

$ jar xf ojdbc14-10.2.0.4.jar oracle/sql/NUMBER.class
$ ls -1 oracle/sql/ NUMBER.class

Необходимые каталоги (в данном случае oracle/sql) будут созданы автоматически.

Создание jar-архива

Ключи:

-vverbose, будет выводить полную информацию о действиях;
-0zero, не будет сжимать файлы перед добавлением в арихв;
-ffile, направить всё в файл;
-ccreate, создать архив;
-Cchange, сменить каталог на время выполнения операции.

Создадим простой архив oracle.jar в который заархивируем содержимое каталога oracle:

$ jar cf oracle.jar oracle/
$ ls -1 oracle oracle.jar

То же, но в подробном режиме:

$ jar cfv oracle.jar oracle/ [...] adding: oracle/jpub/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/MutableStruct.class(in = 5064) (out= 2242)(deflated 55%) [...]

Видно, что файлы сжимаются. Избежим этого, добавим -0:

$ jar cfv0 oracle.jar oracle/ [...] adding: oracle/jpub/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/MutableStruct.class(in = 5064) (out= 5064)(stored 0%) [...]

Видим, что файлы добавляются в архив вместе с директориями. Что бы избежать этого, и файлы размещать в корне архива — используем опцию -C:

$ mkdir or $ touch or/file.d $ jar cf or.jar -C or .

Проверим содержимое:

$ jar vtf or.jar | grep file.d 0 Tue Nov 26 18:45:52 EET 2013 file.d

Файл file.d находится в корне архива, т.к. перед выполнением добавления его в архив — архиватор сменил текущую директорию на or.

Просмотр содержимого jar-архива

-ffile, файл архива;
-ttable, список содержимого;
-vverbose, более полная инфомрация.

Пример:

$ jar tf oracle.jar | grep "jpub/runtime" oracle/jpub/runtime/ oracle/jpub/runtime/MutableStruct.class oracle/jpub/runtime/Util.class oracle/jpub/runtime/MutableArray.class

И с опцией -v:

$ jar tfv oracle.jar | grep "jpub/runtime" 0 Sat Feb 02 11:40:08 EET 2008 oracle/jpub/runtime/ 5064 Sat Feb 02 11:40:08 EET 2008 oracle/jpub/runtime/MutableStruct.class 4997 Sat Feb 02 11:40:06 EET 2008 oracle/jpub/runtime/Util.class 12315 Sat Feb 02 11:40:06 EET 2008 oracle/jpub/runtime/MutableArray.class

Добавление объектов в jar-архив

-u update, обнвоить содержимое архива.

Создадим файл:

$ touch file.f

И добавим его в имеющийся архив oracle.jar:

$ jar uf oracle.jar file.f

Проверим:

$ jar tvf oracle.jar | grep "file.f" 0 Tue Nov 26 18:40:26 EET 2013 file.f

При обновлении архива — так же можно использовать опцию -C (change).

Дополнение

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

$ find . -name "*.jar" | xargs grep "NUMBER.class" Binary file ./ojdbc14-10.2.0.4.jar matches

Как сделать простым и понятным запуск Java-процессов в Linux / Docker / Хабр

По профилю работы DevOps-инженером я часто занимаюсь автоматизацией установки и настройки разнообразных IT-систем в различных средах: от контейнеров до облака. Приходилось работать со многими системами, основанными на Java-стеке: от небольших (вроде Tomcat), до масштабных (Hadoop, Cassandra и др.).

При этом почти каждая такая система, даже самая простая, почему-то имела сложную неповторимую систему запуска. Как минимум, это были многострочные shell-скрипты, как в Tomcat, а то и целые фреймворки, как в Hadoop. Мой нынешний "пациент" из этой серии, вдохновивший меня на написание этой статьи — хранилище артефактов Nexus OSS 3, скрипт запуска которого занимает ~400 строк кода.

Непрозрачность, избыточность, запутанность startup-скриптов создает проблемы даже при ручной установке одного компонента на локальной системе. А теперь представьте, что набор таких компонентов и сервисов нужно запаковать в Docker-контейнер, попутно написав еще один слой абстракции для мало-мальски адекватного оркестрирования, развернуть в Kubernetes-кластере и реализовать этот процесс в виде CI/CD-пайплайна...

Короче говоря, давайте на примере упомянутого Nexus 3 разберемся, как вернуться из лабиринта shell-скриптов к чему-то более похожему на java -jar <program.jar>, учитывая наличие удобных современных DevOps-инструментов.


Если в двух словах, то в древние времена, когда при упоминании UNIX не переспрашивали: "в смысле, Linux?", не было Systemd и Docker и др., для управления процессами использовались переносимые shell-скрипты (init-скрипты) и PID-файлы. Init-скрипты задавали необходимые настройки окружения, которые в разных UNIX-ах были свои, и, в зависимости от аргументов, запускали процесс или перезапускали/останавливали его с помощью ID из PID-файла. Подход простой и понятный, но эти скрипты переставали работать при каждой нестандартной ситуации, требуя ручного вмешательства, не позволяли запустить несколько копий процесса… но не суть.

Так вот, если внимательно посмотреть на упомянутые выше startup-скрипты в Java-проектах, то можно в них разглядеть явные признаки этого доисторического подхода, включая даже упоминания SunOS, HP-UX и других UNIX-ов. Как правило, такие скрипты делают примерно следующее:


  • используют синтаксис POSIX shell со всеми его костылями для UNIX/Linux-переносимости
  • определяют версию и релиз ОС через uname, /etc/*release и т.п.
  • ищут JRE/JDK в укромных уголках файловой системы и выбирают наиболее "подходящую" версию по хитрым правилам, иногда еще и специфичным для каждой ОС
  • рассчитывают числовые параметры JVM, например, размер памяти (-Xms, -Xmx), количество потоков GC и др.
  • оптимизируют JVM через -XX-параметры с учетом специфики выбранной версии JRE/JDK
  • отыскивают свои компоненты, библиотеки, пути к ним по окружающим директориям, конфигурационным файлам и т.п.
  • настраивают окружение: ulimits, переменные среды и т.п.
  • генерируют CLASSPATH циклом типа: for f in $path/*.jar; do CLASSPATH="${CLASSPATH}:$f"; done
  • парсят аргументы командной строки: start|stop|restart|reload|status|...
  • собирают Java-команду, которую в итоге нужно выполнить, из перечисленного выше
  • и, наконец, выполняют эту Java-команду. Зачастую при этом явно или неявно используются все те же пресловутые PID-файлы, &, nohup, специальные TCP-порты и прочие трюки из прошлого столетия (см. пример из Karaf)

Упомянутый скрипт запуска Nexus 3 — подходящий пример такого скрипта.

По сути, вся перечисленная выше скриптовая логика, как бы, пытается заменить системного администратора, который бы установил и настроил все вручную под конкретную систему от начала до конца. Но вообще любые требования самых разнообразных систем учесть, в принципе, невозможно. Поэтому получается, наоборот, головная боль, как для разработчиков, которым нужно поддерживать эти скрипты, так и для системных инженеров, которым в этих скриптах потом нужно разбираться. С моей точки зрения, системному инженеру гораздо проще один раз разобраться в параметрах JVM и настроить ее как надо, чем каждый раз при установке новой системы разбираться в тонкостях ее startup-скриптов.


У — про — щать! KISS и YAGNI нам в руки. Тем более, что на дворе 2018-й год, а это значит, что:


  • за очень редким исключением, UNIX == Linux
  • задача управления процессами решена как для отдельного сервера (Systemd, Docker), так и для кластеров (Kubernetes и т.п.)
  • появилась куча удобных инструментов управления конфигурациями (Ansible и др.)
  • в администрирование пришла и уже основательно закрепилась тотальная автоматизация: вместо ручной настройки хрупких неповторимых "серверов-снежинок" теперь можно автоматически собирать унифицированные репродуцируемые виртуальные машины и контейнеры с помощью целого ряда удобных инструментов, включая упомянутые выше Ansible и Docker
  • повсеместно используются инструменты сбора runtime-статистики, как для самой JVM (пример), так и для Java-приложения (пример)
  • и, самое главное, появились специалисты: системные и DevOps-инженеры, которые умеют использовать перечисленные выше технологии и понимают, как правильно установить JVM на конкрентной системе и впоследствии подстроить ее с учетом собранной runtime-статистики

Так что давайте снова пройдемся по функционалу startup-скриптов еще раз с учетом перечисленных пунктов, не пытаясь при этом делать работу за системного инженера, и уберем оттуда все "лишнее".


  • синтаксис POSIX shell/bin/bash
  • определение версии ОС ⇒ UNIX == Linux, если есть ОС-специфичные параметры, можно описать их в документации
  • поиск JRE/JDK ⇒ у нас единственная версия, и это OpenJDK (ну или Oracle JDK, если уж очень нужно), java и компания есть в стандартном системном пути
  • расчет числовых параметров JVM, тюнинг JVM ⇒ это можно описать в документации по скалированию приложения
  • поиск своих компонентов и библиотек ⇒ описать структуру приложения и способы ее настройки в документации
  • настройка окружения ⇒ описать в документации требования и особенности
  • генерация CLASSPATH-cp path/to/my/jars/* или даже, вообще, Uber-JAR
  • парсинг аргументов командной строки ⇒ аргументов не будет, т.к. обо всем, кроме запуска, позаботится менеджер процессов
  • сборка Java-команды
  • выполнение Java-команды

В итоге, нам нужно просто собрать и выполнить Java-команду вида java <opts> -jar <program.jar> с помощью выбранного менеджера процессов (Systemd, Docker и т.п.). Все параметры и опции (<opts>) мы оставляем на усмотрение системного инженера, который подстроит их под конкретную среду. Если список опций <opts> довольно длинный, можно вновь вернуться к идее startup-скрипта, но, в этом случае, максимально компактного и декларативного, т.е. не содержащего никакой программной логики.


В качестве примера давайте посмотрим, как можно упростить скрипт запуска Nexus 3.

Самый простой вариант, чтобы не залезать в дебри этого скрипта — просто запустить его в реальных условиях (./nexus start) и посмотреть на результат. Например, можно найти полный список аргументов запущенного приложения в таблице процессов (через ps -ef), или запустить скрипт в режиме отладки (bash -x ./nexus start), чтобы наблюдать весь процесс его выполнения и в самом конце — команду запуска.


У меня в итоге получилась следующая Java-команда
/usr/java/jdk1.8.0_171-amd64/bin/java -server -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_171-amd64 -Dexe4j.moduleName=/home/nexus/nexus-3.12.1-01/bin/nexus -XX:+UnlockDiagnosticVMOptions -Dinstall4j.launcherId=245 -Dinstall4j.swt=false -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Xms1200M -Xmx1200M -XX:MaxDirectMemorySize=2G -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+LogVMOutput -XX:LogFile=../sonatype-work/nexus3/log/jvm.log -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true -Dkaraf.home=. -Dkaraf.base=. -Dkaraf.etc=etc/karaf -Djava.util.logging.config.file=etc/karaf/java.util.logging.properties -Dkaraf.data=../sonatype-work/nexus3 -Djava.io.tmpdir=../sonatype-work/nexus3/tmp -Dkaraf.startLocalConsole=false -Di4j.vpt=true -classpath /home/nexus/nexus-3.12.1-01/.install4j/i4jruntime.jar:/home/nexus/nexus-3.12.1-01/lib/boot/nexus-main.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.apache.karaf.main-4.0.9.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.osgi.core-6.0.0.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.apache.karaf.diagnostic.boot-4.0.9.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.apache.karaf.jaas.boot-4.0.9.jar com.install4j.runtime.launcher.UnixLauncher start 9d17dc87 '' '' org.sonatype.nexus.karaf.NexusMain

Вначале применим к ней пару простых приемов:


  • поменяем /the/long/and/winding/road/to/my/java на java, ведь она есть в системном пути
  • поместим список Java-параметров в отдельный массив, отсортируем его и уберем дубликаты

Получаем уже что-то более удобоваримое
JAVA_OPTS = ( '-server' '-Dexe4j.moduleName=/home/nexus/nexus-3.12.1-01/bin/nexus' '-Di4j.vpt=true' '-Di4jv=0' '-Dinstall4j.jvmDir=/usr/java/jdk1.8.0_171-amd64' '-Dinstall4j.launcherId=245' '-Dinstall4j.swt=false' '-Djava.io.tmpdir=../sonatype-work/nexus3/tmp' '-Djava.net.preferIPv4Stack=true' '-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties' '-Dkaraf.base=.' '-Dkaraf.data=../sonatype-work/nexus3' '-Dkaraf.etc=etc/karaf' '-Dkaraf.home=.' '-Dkaraf.startLocalConsole=false' '-XX:+LogVMOutput' '-XX:+UnlockDiagnosticVMOptions' '-XX:+UnlockDiagnosticVMOptions' '-XX:+UnsyncloadClass' '-XX:-OmitStackTraceInFastThrow' '-XX:LogFile=../sonatype-work/nexus3/log/jvm.log' '-XX:MaxDirectMemorySize=2G' '-Xms1200M' '-Xmx1200M' '-classpath /home/nexus/nexus-3.12.1-01/.install4j/i4jruntime.jar:/home/nexus/nexus-3.12.1-01/lib/boot/nexus-main.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.apache.karaf.main-4.0.9.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.osgi.core-6.0.0.jar:/home/nexus/nexus-3.12.1-01/lib/boot/org.apache.karaf.diagnostic.boot-4.0.9.jar:/home/nexus/nexus-3.12.1-01/lib/boot/' ) java ${JAVA_OPTS[*]} com.install4j.runtime.launcher.UnixLauncher start 9d17dc87 '' '' org.sonatype.nexus.karaf.NexusMain

Теперь можно идти в глубину.

Install4j — это такой графический Java-инсталлятор. Похоже, что он используется для начальной установки системы. На сервере он нам не нужен, убираем.

Договоримся о размещении компоненты и данные Nexus на файловой системе:


  • поместим само приложение в /opt/nexus-<version>
  • для удобства создадим символическую ссылку /opt/nexus -> /opt/nexus-<version>
  • сам скрипт разместим вместо исходного как /opt/nexus/bin/nexus
  • все данные нашего Nexus будут лежать на отдельной файловой системе, смонтированной как /data/nexus

Само создание каталогов и ссылок — удел систем управления конфигурациями (на все про все 5-10 строчек в Ansible), поэтому оставим эту задачу системным инженерам.

Пусть наш скрипт при запуске меняет рабочий каталог на /opt/nexus — тогда мы сможем поменять пути к компонентам Nexus на относительные.

Опции вида -Dkaraf.* — это настройки Apache Karaf, OSGi-контейнера, в который, очевидно, "запакован" наш Nexus. Поменяем karaf.home, karaf.base, karaf.etc и karaf.data соответственно размещению компонентов, по возможности используя относительные пути.

Видя, что CLASSPATH состоит из списка jar-файлов, которые лежат в одном каталоге lib/, заменим весь этот список на lib/* (придется также выключить wildcard expansion с помощью set -o noglob).

Поменяем java на exec java, чтобы наш скрипт на запускал java как дочерний процесс (менеджер процессов этот дочерний процесс просто не увидит), а "заменял" себя на java (описание exec).

Посмотрим, что нас получилось:

#!/bin/bash JAVA_OPTS=( '-Xms1200M' '-Xmx1200M' '-XX:+UnlockDiagnosticVMOptions' '-XX:+LogVMOutput' '-XX:+UnsyncloadClass' '-XX:LogFile=/data/nexus/log/jvm.log' '-XX:MaxDirectMemorySize=2G' '-XX:-OmitStackTraceInFastThrow' '-Djava.io.tmpdir=/data/nexus/tmp' '-Djava.net.preferIPv4Stack=true' '-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties' '-Dkaraf.home=.' '-Dkaraf.base=.' '-Dkaraf.etc=etc/karaf' '-Dkaraf.data=/data/nexus/data' '-Dkaraf.startLocalConsole=false' '-server' '-cp lib/boot/*' ) set -o noglob cd /opt/nexus \ && exec java ${JAVA_OPTS[*]} org.sonatype.nexus.karaf.NexusMain

Итого всего 27 строчек вместо >400, прозрачно, понятно, декларативно, никакой лишней логики. При необходимости этот скрипт легко превратить в темплейт для Ansible/Puppet/Chef и добавить туда только ту логику, которая нужна для конкретной ситуации.

Этот скрипт можно использовать в качестве ENTRYPOINT в Dockerfile или вызывать в unit-файле Systemd, заодно подстроив там ulimits и другие системные параметры, например:

[Unit] Description=Nexus After=network.target [Service] Type=simple LimitNOFILE=1048576 ExecStart=/opt/nexus/bin/nexus User=nexus Restart=on-abort [Install] WantedBy=multi-user.target

Какие выводы можно сделать из этой статьи? В принципе, все сводится к паре пунктов:


  1. У каждой системы свое предназначение, т.е., не нужно забивать гвозди микроскопом.
  2. Простота (KISS, YAGNI) рулит — реализовывать только то, что нужно для данной конкретной ситуации.
  3. И самое главное: круто, что есть IT-специалисты разного профиля. Давайте будем взаимодействовать и делать наши IT-системы проще, понятнее и лучше! :)

Спасибо за внимание! Буду рад обратной связи и конструктивной дискуссии в комментариях.

программы для запуска на Windows и Mac

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

Рисунок 1. Окно выбора файла формата .jar для открытия

Что такое формат файла jar

Расширение Java ARchive – это специальный архив с приложениями. Если говорить простым языком, это документ ZIP, который дополнен определенными функциями. Как же его использовать на разных девайсах?

Как запустить файл в windows

На операционной системе Виндовс можно запустить jar файл специальными программами. Давайте перечислим основные варианты.

Oracle Java Runtime Environment

Это приложение, которое позволит просматривать документы на персональном компьютере. Вы сможете работать даже с теми играми, которые наотрез отказываются «сотрудничать» со стандартными программами.

Eclipse

Это бесплатная разработка, которая создана для работы с таким форматом. Простое и понятное меню не вызовет проблем и сложностей. В нем разберется начинающий пользователь, ведь все разложено по полочкам.

7-Zip

Этот архиватор поможет разобраться, как открыть файл jar. Подходит для использования документов с соответствующим форматом (Рисунок 2). Полнофункциональное приложение доступно для бесплатного скачивания. Скачать программу 7-Zip возможно на нашем сайте.

 

Рисунок 2. Внешний вид интерфейса программы 7-zip для работы с файлами jar

WinRAR

Этот архиватор умеет обрабатывать большинство расширений. С ним намного комфортнее понять, как запустить jar файл (Рисунок 3). Продукт используется на разных платформах.

Примечание: WinRAR Вы можете скачать у нас с сайта.

 

Рисунок 3. Рабочий интерфейс приложения WinRaR для работы с файлами .jar

IZArc

Бесплатная программка, которая поддерживает работу с доками разных форматов. Очень простая и понятная разработка. Интерфейс продуман до мельчайших подробностей.Программа IZArc доступна на нашем сайте.

WinZIP

Еще один достаточно распространенный архиватор, который предназначен для расширения. WinZIP возможно скачать с нашего сайта. Отличается отменным сжатием памяти, поэтому есть возможность сэкономить место на жестком диске (Рисунок 4). Пакет предложен в разных версиях, что позволяет подобрать подходящий вариант для своего оборудования.

 

Рисунок 4. Внешний вид окна распакованного файла в приложении WinZIP

ZipZag

Работа с архивами будет комфортной и простой. Каждый пункт меню понятен для пользователя с небольшим опытом. Вы сможете просматривать документы формата, не сталкиваясь с проблемами.

Java Development Kit

Интерактивный пакет разработан специально для подобных расширений. Это полноценный набор инструментов, которые выполняют полезные функции.

Теперь вы знаете, как запустить jar файл в windows с помощью специальных пакетов.

 

Как запустить файл на linux

Линукс – это операционная система, на которой тоже часто используются подобные форматы. Посмотрите, как запустить jar файл linux, не сталкиваясь с проблемами.

Eclipse

Самый простой и доступный каждому пользователю вариант. С ним можно быстро загрузить то, что нужно, не сталкиваясь со всевозможными сложностями. За скачивание пакета не придется платить.

Java Runtime Environment

Она позволяет запустить приложения, которые написаны на языке Java. Платформа подходит для эксплуатации на девайсах, работающих на операционной системе Линукс.

Запуск jar файла на MacOS

Для этой ОС тоже существуют пакеты, дающие возможность насладиться любимыми играми и прочими апплетами.

Apple Jar Launcher

Отменный пакет, с которым запуск jar файла будет оперативным. Работа с ним простая и понятная. Пользователи с легкостью разберутся в меню.

WinZip Mac

Вариант для архивирования и хранения данных. Быстро открывает соответствующие расширения (Рисунок 5).

 

Рисунок 5. Внешний вид интерфейса приложения WinZip Mac для MacOS устройств

Java Runtime Environment

Платформа, установка которой позволит вам запускать документы. Не занимает много места, устанавливается менее чем за 2 минуты.

Как открыть файл на андроиде

Многие современные девайсы работают на ОС Андроид. Вы можете узнать, как открыть файл jar на андроиде без труда.

File Viewer

Универсальная прога, которая позволяет смотреть содержание документов с разными форматами. Как нельзя лучше подходит для этой операционной системы.

Как открыть файл с помощью java?

Вы не знаете, как открыть jar файл с помощью java? Для просмотра документов есть множество приложений Java. Вы можете выбрать то, что подходит для вашей операционной системы. Изучите характеристики каждого из вариантов, чтобы подобрать оптимальный пакет для своего гаджета.

Если вы ищете, чем открыть jar файл на компьютере, просмотрите вышеописанные способы. Среди них вы обязательно что-то возьмете на заметку!

Установка Java в Linux | Losst

В этой статье речь пойдёт о проприетарной версии Java. Часто происходят ситуации, когда пользователь пытается открыть какую-либо программу на Java, а она либо вообще не запускается, либо пытается это сделать с помощью OpenJDK (Java Development Kit). Но вместо результата вы получаете кучу ошибок (как например с Minecraft). В данных ситуациях вам, скорее всего, поможет установка Java от Oracle.

Я вам расскажу, как установить JRE (Java Runtime Environment) и JDK (Java Development Kit)  8 версии на такие дистрибутивы, как Ubuntu, CentOS и Arch, а также как выбрать нужную среду по умолчанию.

Содержание статьи:

Чем отличается JDK от JRE

  • JRE - Java Runtime Environment - это среда выполнения Java. Предназначена для обычного использования. Позволяет запускать приложения, написанные на языке Java.
  • JDK- Java Development Kit - стандартная версия платформы Java, предназначенная для разработки. Это специальный пакет разработчика, в который входят документация, различные утилиты, компилятор, библиотеки классов, а также сама JRE.

Установка Java в Linux своими руками

JRE

Скачать архив с необходимой вам версией вы можете с официального сайта. Далее вам надо перенести его в желаемую директорию и распаковать. Рекомендую /opt/java, далее она и будет использоваться. Сделайте это, используя следующие команды:

sudo mv ~/путь/до/файла/jre*.tar.gz /opt/java

sudo tar -xzf /opt/java/jre*.tar.gz

Где "*" - версия Java.

JDK

Загрузите архив со средствами разработчки с официального сайта компании Oracle. Также перенесите его в желаемую директорию и распакуйте:

sudo mv ~/путь/до/файла/jdk*.tar.gz /opt/java

sudo tar -xzf /opt/java/jdk*.tar.gz

Установка Java в Ubuntu

JRE и JDK

Для установки проприетарной Oracle Java  вам необходимо добавить репозиторий, обновить индексы пакетов и установить Java. В Ubuntu, начиная с 18 релиза, это делается автоматически после добавления репозитория.

Внимание! Будут установлены как JRE, так и JDK. Сначала добавим репозиторий и обновим списки пакетов:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

В процессе установки необходимо будет принять лицензионное соглашение:

sudo apt-get install oracle-java8-installer

Установка Java в ArchLinux

JRE

В официальных репозиториях есть только OpenJDK. Поэтому придётся воспользоваться пакетом из AUR(вы можете, конечно, руками установить Java от Oracle, но AUR проще). Установка производится всего одной командой:

yaourt -S jre8

 

JDK

JDK так же можно установить, используя AUR. Просто выполните команду:

yaourt -S jdk8

Установка Java в CentOS

JRE

Для RHEL, Fedora, Cent OS, OpenSUSE есть официальный RPM-пакет, который вы можете скачать с официального сайта. Чтобы установить пакет из терминала, воспользуйтесь этой командой:

sudo rpm -i /путь/к/файлу/jre-*.rpm

где "*" - версия Java. Или же примените любую графическую утилиту.

JDK

Средства для разработчика вы можете скачать на сайте Oracle, ссылка на который есть в верху статьи. Для установки из терминала, используйте команду:

sudo rpm -i ~/путь/к/файлу/jdk-*.rpm

Где "*" - версия Java. "~" -  указывает, что путь начинается.

Выбор версии Java

Ubuntu

Для переключения на 8 версию Java используйте следующую команду:

sudo update-java-alternatives -s java-8-oracle

Чтобы автоматически установить переменные среды, воспользуйтесь командой:

sudo apt-get install oracle-java8-set-default

Или же вы можете установить альтернативы сами. Делается это с помощью следующих команд:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-oracle/bin/java 1

sudo update-alternatives --install /usr/bin/javaс javaс /usr/lib/jvm/java-8-oracle/bin/javaс 1

sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/java-8-oracle/bin/javaws 1

Теперь осталось выбрать версии исполняемых файлов java, javaws и javac, которые будут использоваться по умолчанию:

sudo update-alternatives --config java

sudo update-alternatives --config javac

sudo update-alternatives --config javaws

ArchLinux

Для начала просмотрите список установленных сред:

archlinux-java status

Затем установите необходимую вам:

archlinux-java set имя_среды

Пример:

archlinux-java set java-8-jre/jre

CentOS

Выбрать необходимую среду можно с помощью команд, данных ниже (так же, как и в Ubuntu). Вам нужно будет просто выбрать цифру, соответствующую номеру версии:

sudo update-alternatives --config java

sudo update-alternatives --config javac

sudo update-alternatives --config javaws

Настройка переменных окружения

Чтобы настройки были доступны для всех пользователей, будем использовать файл /etc/profile. Откройте его для редактирования любым текстовым редактором с помощью команды sudo и добавьте в конец следующие строки:

  1. export JAVA_HOME=/opt/java/jdk*/
  2. export JRE_HOME=/opt/java/jdk*/jre
  3. export PATH=$PATH:/opt/java/jdk*/bin:/opt/java/jdk*/jre/bin

Не забывайте! 

  • Вместо пути по умолчанию /opt/java укажите тот, который использовали;
  • Если вы используете не JDK, а JRE, то в пути у вас так же будет не "jdk*", а "jre*";
  • "*" - версия Java, которая у вас установлена.

Выводы

В данной статье мы подробно разобрали процесс установки и настройки Java в различных дистрибутивах Linux. Если остались вопросы, спрашивайте в комментариях!

Как я могу выполнить файл .jar из терминала

Если это исполняемый файл jar, то

java -jar Minecraft.jar 

Не все jar-архивы содержат исполняемый класс, объявленный для запуска в файле манифеста, но если он есть, это будет работать.

Кстати: вы не запускаете большинство программ из оболочки с точкой. Точка является ярлыком для source, и она работает только в bash и некоторых других оболочках, чтобы включить скрипт в область текущего сеанса.

Скомпилированный двоичный xybin просто запускается с его именем, если он находится в пути:

xybin 

или с его абсолютным путем:

/home/foo/proj/test/xybin

или с его относительным путем:

proj/test/xybin

или, если вы оказались в каталоге файла, с этим относительным путем:

./xybin

Файл должен быть помечен как исполняемый для вас (см .: chmod). Все вышесказанное верно и для сценариев оболочки, но они часто имеют расширение .sh, и вы можете запустить сценарий оболочки, вызвав интерпретатор, и тогда его не нужно отмечать исполняемым:

 bash xy.sh

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

Как запустить программу на Linux

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

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

Содержание статьи:

Виды программ в Linux

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

Все программы можно поделить на несколько типов:

  • Бинарные программы - содержат инструкции процессору уже готовые к выполнению, большинство программ находятся в таком формате, они быстрые и выполняются сразу же системой;
  • Программы на байт-коде - это уже не процессорные инструкции, а инструкции определенной виртуальной машины, которая может их выполнять, без виртуальной машины такие команды не могут быть выполнены. Такие программы потребляют больше ресурсов, но тоже достаточно быстрые, их преимущество в том, что они могут выполняться без изменения везде где может работать виртуальная машина. К таким программам можно отнести программы на Java.
  • Скриптовые программы - эти программы состоят из набора команд в виде обычного текста, которые выполняет специальный интерпретатор. Такие программы более медленные, но зато они проще в разработке и их код можно легко и быстро изменить.

А теперь перейдем к запуску программ.

Запуск программ в терминале

Изначально в операционных системах Unix и Linux не было графического интерфейса, поэтому программы запускались командами из терминала. Сейчас это тоже возможно и достаточно активно используется опытными пользователями. Синтаксис запуска программы выглядит таким образом:

/путь/к/файлу/программы параметры

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

Разработчики придумали обходной путь. Была создана переменная PATH, в которой хранятся все пути к папкам где обычно находятся программы - /bin, /sbin, /usr/bin, /usr/sbin и так далее. Вы можете посмотреть ее содержимое командой:

echo $PATH

Когда вы набираете имя программы система ищет исполняемый файл с таким именем по всем папкам из PATH и если находит - то выполняет. Если же такого файла нет, то выдается сообщение - command not found. Таким образом, чтобы запустить одну из системных программ достаточно набрать имя ее исполняемого файла, например:

ls

И можно передать параметры после пробела:

ls /

Когда программа находится не в этих каталогах, нужно указать к ней полный путь:

/usr/local/bin/ls1

Если же вы хотите запустить программу через терминал ubuntu, которая находится в текущей папке, то ситуация будет немного другой. Система выполняет только поиск по папкам из переменной PATH, в текущей директории она не ищет. Поэтому, если вы наберете имя исполняемого файла, то получите ошибку. Нужно указывать полный путь, как вы помните путь к текущей папке будет ./:

./helloworld

Иногда возникает необходимость передать программе, какие-либо особые переменные окружения. Например, переменная EDITOR указывает какой текстовый редактор нужно использовать по умолчанию. Вы можете указать имя переменной и ее значение перед именем команды используя синтаксис:

имя_переменной=значение команда

Например:

EDITOR=nano visudo

По умолчанию эта команда открывает настройки утилиты sudo в редакторе Vim, но с этой переменной окружения настройки откроются в редакторе nano.

Запуск программ от имени другого пользователя

Вы уже знаете как запустить программу в терминале linux, а что насчет других пользователей? В Windows достаточно часто используется запуск программ от имени администратора чтобы программа могла получить больше прав доступа в системе. В Linux для этого используется утилита sudo. Ее имя можно расшифровать как switchuserdo - изменить пользователя и выполнить. По умолчанию утилита выполняет команду от имени суперпользователя root:

sudo команда
sudo whoami

Но с помощью опции -u можно выполнить программу от имени любого пользователя, зарегистрированного в системе:

sudo -u имя_пользователя команда
sudo -u postgres whoami 

Команда whoami (кто я) выводит имя текущего пользователя.

Как запустить программу в фоне

Иногда возникает необходимость запустить долго выполняющуюся программу в терминале так, чтобы она не мешала дальше работать. Для этого можно использовать запуск программы в фоновом режиме linux:

имя_программы &

Например:

dd if=/dev/zero of=~/file count=100000 &

Система выведет PID, уникальный идентификатор программы, который вы потом можете использовать чтобы закрыть ее командой kill:

kill 18110

Как запустить скрипт в Linux

Мы уже говорили, что программы делятся на бинарные и интерпретируемые. Раньше мы говорили только про бинарные программы. Для запуска интерпретируемых нужен непосредственно интерпретатор, к таким программам относятся написанные на таких языках, как Java, Python, Perl, Ruby, PHP, NodeJS и многих других. Синтаксис запуска такой программы отличается:

интерпретатор /путь/к/файлу/программы параметры

Разные интерпретаторы ведут себя по разному, поэтому лучше сразу указывать полный путь к программе. Python обычно подхватывает скрипты из текущей папки без указания полного пути:

python hellowrld.py

А Java программы нужно запускать так:

java -jar program.jar

Для файлов интерпретируемых программ флаг исполняемости необязательный, поскольку они передаются в виде параметра основной программе. Только Bash скрипты составляют исключение. Вы можете запустить скрипт интерпретатором:

bash script.sh

Или же просто набрать путь к скрипту:

./script.sh

Оболочка сама определяет свои скрипты по флагу исполняемости и выполняет их. Если флаг исполняемости не установлен, то его стоит добавить:

sudo chmod u+x ./script.sh

Поэтому то и для большинства интерпретируемых программ созданы простые sh скрипты которыми их можно быстро запустить.

Запуск программ Linux в графическом интерфейсе

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

Кроме того, вы можете запустить программу из файлового менеджера, двойным кликом мышью, но тогда для нее обязательно должен быть установлен флаг исполняемости.

Точно так же работает запуск скриптов в графическом интерфейсе. Вы можете найти все ярлыки из меню в каталоге /usr/share/applications/. Любую программу можно запустить двойным щелчком отсюда. Но давайте посмотрим что находится внутри ярлыка, для этого откройте его в текстовом редакторе:

Кроме всего прочего, в строке Exec указана команда, которая выполняет запуск программы linux, когда вы делаете двойной клик на ярлыке. Вы можете взять один из существующих ярлыков и сделать на его основе свой. Здесь указано просто имя программы. Но важно заметить, что лучше указывать полный путь в таких местах, как ярлыки, скрипты, cron и так далее это уменьшит количество ошибок, поскольку вы не можете знать проверяет ли система в этом случае PATH или ищет программу только в текущем каталоге. Теперь вы знаете все о том как запустить программу на linux.

Выводы

В этой статье мы рассмотрели как запустить программу через терминал ubuntu или в других дистрибутивах Linux. Несмотря на то, что это кажется очень простой темой, тут есть свои интересные моменты, которые могут быть полезны. Но вы о них уже знаете. Если у вас остались вопросы, спрашивайте в комментариях!

Запустить файл jar как службу Linux

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

bash - запустить файл jar как демон в Linux Ubuntu

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант
.

java - запуск файла .jar в ubuntu

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

java - Как сделать файл jar исполняемым двоичным файлом для linux и запускать как службу

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
.

java - Как постоянно и автоматически запускать .jar на сервере Debian?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Наймите технических талантов и
.

java - Запустить файл jar с аргументами командной строки

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также