Java (Русский)

Arch Linux официально поддерживает OpenJDK, свободную реализацию Java SE, версий 8, 11, 17 и 18. Эти версии можно без проблем установить одновременно, а также переключаться между ними с помощью скрипта archlinux-java. Несколько других реализаций доступны в AUR, но они не поддерживаются официально.

Состояние перевода: На этой странице представлен перевод статьи Java. Дата последней синхронизации: 23 декабря 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Из Википедии:

Java — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process, язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.

Установка

Примечание:
  • Официально поддерживается только OpenJDK.
  • После установки окружение Java должно быть определено в переменной $PATH, что можно сделать с помощью команды source /etc/profile, повторного входа в среду рабочего стола или перезагрузки.

Существуют два главных пакета, которые являются зависимыми: java-runtime-common (содержит основные файлы для Java Runtime Environment — JRE) и java-environment-common (содержит основные файлы для Java Development Kit — JDK). Переменная окружения $PATH в файле /etc/profile.d/jre.sh указывает на каталог , заданный скриптом archlinux-java.

Ссылки и следует менять только при помощи скрипта archlinux-java. Эти ссылки ведут на выбранное рабочее окружение Java в или JRE — /usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre.

Большинство исполняемых файлов Java находятся в , остальные доступны через $PATH. Скрипт больше не предоставляется ни одним из пакетов.

OpenJDK

OpenJDK — свободная реализация Java Platform, Standard Edition (Java SE), являющаяся референсной реализацией. Существуют также и другие сборки, например, Adoptium (ранее AdoptOpenJDK) или Amazon Corretto, но они не выложены в официальные репозитории. Пакет OpenJDK собирается из последнего состояния репозитория исходного кода OpenJDK.

Headless JRE
минимальная среда выполнения для Java; не поддерживает GUI.
Full JRE
полная среда выполнения, поддерживающая GUI и зависящая от headless JRE.
JDK
Java Development Kit; необходим для разработки Java-приложений и зависит от full JRE.
ВерсияHeadless JREFull JREJDKДокументацияИсходный код
OpenJDK 18jre-openjdk-headless
OpenJDK 17jdk17-openjdk
OpenJDK 11openjdk11-src
OpenJDK 8openjdk8-doc

OpenJFX

OpenJFX — свободная реализация JavaFX. Данный пакет включён в Oracle JRE/JDK и требуется к дополнительной установке лишь пользователям OpenJDK.

ВерсияRuntime и Developement KitДокументацияИсходный код
OpenJFX 18
OpenJFX 17java17-openjfx-docjava17-openjfx-src
OpenJFX 11
OpenJFX 8

Другие реализации

Oracle JDK проприетарная реализация JRE от Oracle, версии до 17 требуют пакета, доступного только после входа в аккаунт Oracle.

https://www.oracle.com/ru/java/ ||
JRE: jreAUR jre-ltsAUR jre11AUR jre8AUR jre7AUR
JDK: jdkAUR jdk-ltsAUR jdk11AUR jdk8AUR jdk7AUR

OpenJ9 JRE от Eclipse, созданная при участии IBM.

https://www.eclipse.org/openj9/ || jdk-openj9-binAUR jdk11-openj9-binAUR jdk8-openj9-binAUR

Инструменты для разработки

См. List of applications#Integrated development environments для получения списка IDE (в частности, секцию Java IDEs).

Чтобы усложнить процесс реверс-инжиниринга, можно воспользоваться обфускатором .

Декомпиляторы

  • Krakatau декомпилятор, ассемблер и дизассемблер для Java.
https://github.com/Storyyeller/Krakatau || krakatau-gitAUR

Переключение между средами

Скрипт archlinux-java предусматривает следующие возможности:

archlinux-java <COMMAND>

COMMAND:
       status          список установленных окружений Java и их статус
       get             короткое название текущего окружения Java
       set <JAVA_ENV>  устанавливает окружение <JAVA_ENV> по умолчанию
       unset           сбрасывает текущее окружения Java по умолчанию
       fix             исправляет ошибки конфигурации окружения Java, выбранного по умолчанию

Получение списка установленных совместимых сред Java

$ archlinux-java status

Пример:

Метка как раз и подписывает окружение, установленное по умолчанию. Выполнение или других команд будет ссылаться на эту версию. Отметка /jre означает, что установлен только JRE.

Установка среды Java по умолчанию

# archlinux-java set <JAVA_ENV_NAME>

Пример:

# archlinux-java set java-8-openjdk/jre

Обратите внимание, что archlinux-java не позволит задать некорректную среду Java. В предыдущем примере была использована установленная среда , а, к примеру, указание неустановленной среды завершилось бы следующей ошибкой:

Сброс среды Java по умолчанию

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

# archlinux-java unset

Исправление конфигурации используемой среды Java

Если на какое-нибудь окружение Java задана неверная ссылка, команда archlinux-java fix попытается найти и исправить ошибку. Также эта команда задаст окружение по умолчанию, если оно отсутствует (официально поддерживаемое окружение OpenJDK 8 имеет наивысший приоритет).

# archlinux-java fix

Запуск приложений с не установленным по умолчанию окружением

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

#!/bin/sh

export PATH="/usr/lib/jvm/java-11-openjdk/bin/:$PATH"
exec /путь/к/приложению "$@"

Требования к пакетам сред для поддержки archlinux-java

Этот раздел предназначен для тех, кто хочет распространять свои пакеты JVM в AUR и использовать для управления archlinux-java. Пакеты должны соответствовать всем пунктам ниже:

Стоит принять во внимание и эти советы:

  • пакеты, которым нужно окружение Java должны объявить зависимости , или
  • пакеты, которым нужно определённое окружение Java должны объявить зависимости с необходимым суффиксом
  • пакеты OpenJDK объявляют provides="java-runtime-openjdk=${pkgver}", что позволяет стороннему пакету объявлять зависимость от OpenJDK без указания версии

Решение проблем

Не подключается MySQL

В связи с тем, что драйверы JDBC часто используют порт в URI для установления соединения с базой данных, он считается «удалённым» (т. е. MySQL не прослушивает порт в соответствии с его настройками по умолчанию), несмотря на то, что, возможно, они работают на одном хосте. Таким образом, чтобы использовать JDBC и MySQL, вы должны разрешить удаленный доступ в MySQL; смотрите инструкцию в статье MariaDB#Grant remote access.

Не запускается IntelliJ IDEA

Если IntelliJ IDEA вылетает с ошибкой , придётся установить другую JDK или использовать IntelliJ IDEA с JetBrains Runtime.

Ошибки отрисовки приложений Java

В оконных менеджерах Awesome, Dwm и Ratpoison возникают ошибки отрисовки GUI в Java, появляются серые окна, приложения не изменяют размер, меню мгновенно закрываются. Для того, чтобы JVM думала, что используется оконный менеджер, отличный от установленного, используется wmname. Задайте поддельное название оконного менеджера, например, или

$ wmname compiz

После выполнения команды нужно перезапустить приложение Java. Такое поведение обосновано тем, что в JVM прямо установлены известные оконные менеджеры, которые используют подход non-re-parenting.

Если установка поддельного оконного менеджера не применима, есть несколько советов:

  • для добавьте строчку в /etc/profile.d/jre.sh, затем выполните этого файла или перезайдите
  • для свежих JVM работает добавление в ~/.xinitrc перед командой запуска оконного менеджера
  • для пакетов Oracle можно использовать SetWMName, однако, положительный эффект может быть сброшен при использовании пакета в приложении. В этом случае может помочь добавление строчки к
  • для sway добавьте export _JAVA_AWT_WM_NONREPARENTING=1.

Смотрите также Problems with Java applications, Applet java console на Haskell.org.

Неразборчивый шрифт в приложениях Java

Некоторые шрифты не читаются, поэтому следует установить другие, читаемые шрифты, например, .

В некоторых приложениях отсутствует текст

Далее в разделе #Улучшенное отображение шрифтов приводятся параметры; см. также .

Система зависает при дебаггинге

Используйте параметр JVM . Смотрите также страницу бага в JDK 6.

Конструктор JavaFX MediaPlayer вылетает с ошибкой

При создании экземпляра класса может появиться такая ошибка:

... (i.e. FXMLLoader construction exceptions) ...
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!
 at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146)
 at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511)
 at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414)
 at <constructor call>
 ...

это связано с несовеместимостью JavaFX и из репозитория, поэтому следует установить . См. также обсуждение на Reddit.

В приложениях Java не открываются внешние ссылки

Установите gvfs; в приложении требуется реализовать метод . См. также обсуждение на Launchpad.

Ошибка инициализации :

Либо отсутствует GTK2 — установите gtk2, либо отсутствует OpenJFX — установите .

Советы и рекомендации

Поведение большинства приложений Java можно контролировать, предоставляя предопределённые переменные для среды выполнения Java. Для этого нужно добавлять строчки в или /etc/profile.d/jre.sh.

export JDK_JAVA_OPTIONS="-D<option 1> -D<option 2>..."

Например, предопределённое использование сглаженных шрифтов и GTK:

export JDK_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'

Java воспринимает указанные ниже переменные окружения при запуске приложений (расположены в порядке повышения приоритета).

JAVA_TOOL_OPTIONS Влияет на приложения и на некоторые утилиты (например, или ).
JDK_JAVA_OPTIONS Влияет на приложения (запущенные через команду ). Добавлена в Java 9.
(аргументы командной строки) Аргументы, указанные после названия класса Java передаются в приложение.
_JAVA_OPTIONS Устаревшая переменная, влияет и на приложения, и на утилиты.

Улучшенное отображение шрифтов

Установите параметры JVM , . См. статью Java Runtime Environment fonts

Скрытие сообщения 'Picked up JDK_JAVA_OPTIONS'

При установке какого-либо параметра JVM появляется сообщение вида Picked up JDK_JAVA_OPTIONS=.... Чтобы избавиться от сообщения, можно удалить эту переменную окружения, а вместо неё передать параметры через аргументы командной строки. Добавьте эти строки в :

SILENT_JAVA_OPTIONS="$JDK_JAVA_OPTIONS"
unset JDK_JAVA_OPTIONS
alias java='java "$SILENT_JAVA_OPTIONS"'

Оформление GTK

Установите параметры JVM

swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

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

swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

Поддержка GTK 3

В версиях, предшествующих Java 9 использовался вид GTK 2. Эта несовместимость между версиями GTK может нарушить работу приложений, использующих плагины Java с графическим интерфейсом, поскольку смешивание GTK 2 и GTK 3 в одном и том же процессе не поддерживается (например, LibreOffice 5.0). Начиная с Java 9 можно выбрать GTK , или 3, но по умолчанию используется GTK 3; чтобы задать приоритет используйте параметр JVM

jdk.gtk.version=2.2

Ускорение отрисовки 2D

Если доступно использование OpenGL, его можно включить в приложениях Java, задав переменную окружения

export JDK_JAVA_OPTIONS='-Dsun.java2d.opengl=true'
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.