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 в файле указывает на каталог /usr/lib/jvm/default/bin, заданный скриптом archlinux-java.

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

Большинство исполняемых файлов Java находятся в /usr/bin, остальные доступны через $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 18
OpenJDK 17openjdk17-doc
OpenJDK 11jre11-openjdk-headless
OpenJDK 8openjdk8-src

OpenJFX

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

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

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

Eclipse Adoptium/Temurin/AdoptOpenJDK реализация JRE/JDK от Eclipse, основана на Hotspot JVM.

https://adoptium.net/ || jdk-temurinAUR jdk17-temurinAUR jdk11-temurinAUR

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

Пример:

Метка (default) как раз и подписывает окружение, установленное по умолчанию. Выполнение или других команд будет ссылаться на эту версию. Отметка означает, что установлен только 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-runtime, или
  • пакеты, которым нужно определённое окружение Java должны объявить зависимости с необходимым суффиксом
  • пакеты OpenJDK объявляют , что позволяет стороннему пакету объявлять зависимость от OpenJDK без указания версии

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

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

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

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

Если IntelliJ IDEA вылетает с ошибкой The selected directory is not a valid home for JDK, придётся установить другую JDK или использовать IntelliJ IDEA с JetBrains Runtime.

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

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

$ wmname compiz

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

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

  • для добавьте строчку в , затем выполните этого файла или перезайдите
  • для свежих JVM работает добавление в перед командой запуска оконного менеджера
  • для пакетов Oracle можно использовать SetWMName, однако, положительный эффект может быть сброшен при использовании пакета XMonad.Hooks.EwmhDesktops в приложении. В этом случае может помочь добавление строчки >> setWMName "LG3D" к
  • для sway добавьте .

Смотрите также 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 не открываются внешние ссылки

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

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

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

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

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

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 , или , но по умолчанию используется GTK 3; чтобы задать приоритет используйте параметр JVM

jdk.gtk.version=2.2

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

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

export JDK_JAVA_OPTIONS='-Dsun.java2d.opengl=true'
gollark: In IPv4, support wasn't required or something.
gollark: My latest mostly pointless idea: chat over IPv6 multicast.
gollark: Waaaaaait, maybe I could just... implement MIPS.
gollark: It really is very good. It inspired PotatoASM.
gollark: There is probably SÖME way.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.