Java (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Java
. Дата последней синхронизации: 23 декабря 2021. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Java Package Guidelines
Шрифты окружения Java Runtime
Из
Википедии
:
Java — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process, язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.
Arch Linux официально поддерживает
OpenJDK
, свободную реализацию Java SE, версий 8, 11, 17 и 21. Эти версии можно без проблем установить одновременно, а также переключаться между ними с помощью скрипта
archlinux-java
. Несколько других реализаций доступны в
AUR
, но они не поддерживаются официально.
Установка
Примечание
Официально поддерживается только
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
указывает на каталог
/usr/lib/jvm/default/bin
, заданный скриптом
archlinux-java
.
Ссылки
/usr/lib/jvm/default
и
/usr/lib/jvm/default-runtime
следует менять только при помощи скрипта
archlinux-java
. Эти ссылки ведут на выбранное рабочее окружение Java в
/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
или JRE —
/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre
.
Большинство исполняемых файлов Java находятся в
/usr/bin
, остальные доступны через
$PATH
. Скрипт
/etc/profile.d/jdk.sh
больше не предоставляется ни одним из пакетов.
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 JRE
Full JRE
JDK
Документация
Исходный код
OpenJDK 21
jre-openjdk-headless
jre-openjdk
jdk-openjdk
openjdk-doc
openjdk-src
OpenJDK 17
jre17-openjdk-headless
jre17-openjdk
jdk17-openjdk
openjdk17-doc
openjdk17-src
OpenJDK 11
jre11-openjdk-headless
jre11-openjdk
jdk11-openjdk
openjdk11-doc
openjdk11-src
OpenJDK 8
jre8-openjdk-headless
jre8-openjdk
jdk8-openjdk
openjdk8-doc
openjdk8-src
OpenJDK GA
— свежая сборка OpenJDK General-Availability Release от Oracle.
https://jdk.java.net
||
java-openjdk-bin
AUR
OpenJDK EA
— свежая сборка OpenJDK Early-Access от Oracle.
https://jdk.java.net
||
java-openjdk-ea-bin
AUR
icedTea-Web
— Java Web Start и устаревший плагин Java для браузеров.
https://icedtea.classpath.org/download/icedtea-web-docs/1.8/html/en/icedtea-web.html
||
icedtea-web
OpenJFX
OpenJFX
— свободная реализация
JavaFX
. Данный пакет включён в Oracle JRE/JDK и требуется к дополнительной установке лишь пользователям OpenJDK.
Версия
Runtime и Development Kit
Документация
Исходный код
OpenJFX 21
java-openjfx
AUR
java-openjfx-doc
AUR
java-openjfx-src
AUR
OpenJFX 17
java17-openjfx
AUR
java17-openjfx-doc
AUR
java17-openjfx-src
AUR
OpenJFX 11
java11-openjfx
AUR
java11-openjfx-doc
AUR
java11-openjfx-src
AUR
OpenJFX 8
java8-openjfx
AUR
java8-openjfx-doc
AUR
java8-openjfx-src
AUR
OpenJFX GA
— свежая сборка OpenJFX General-Availability Release от Gluon.
https://openjfx.io/
||
java-openjfx-bin
AUR
OpenJFX EA
— свежая сборка OpenJFX Early-Access от Gluon.
https://openjfx.io/
||
java-openjfx-ea-bin
AUR
[
ссылка недействительна
: package not found]
Другие реализации
Oracle JDK
— проприетарная реализация JRE от Oracle, версии до 17 требуют пакета, доступного только после входа в аккаунт Oracle.
https://www.oracle.com/ru/java/
||
JRE:
jre
AUR
jre-lts
AUR
jre11
AUR
jre8
AUR
jre7
AUR
JDK:
jdk
AUR
jdk-lts
AUR
jdk11
AUR
jdk8
AUR
jdk7
AUR
Eclipse Adoptium/Temurin/AdoptOpenJDK
— реализация JRE/JDK от Eclipse, основана на Hotspot JVM.
https://adoptium.net/
||
jdk-temurin
AUR
jdk17-temurin
AUR
jdk11-temurin
AUR
OpenJ9
— JRE от Eclipse, созданная при участии IBM.
https://www.eclipse.org/openj9/
||
jdk-openj9-bin
AUR
jdk11-openj9-bin
AUR
jdk8-openj9-bin
AUR
IBM Certified
— IBM Semeru Runtime Certified Edition.
https://www.ibm.com/semeru-runtimes/downloads
||
jdk11-j9-bin
AUR
IBM J9
— реализация JRE 7 и 8 от IBM.
https://www.ibm.com/support/pages/java-sdk
||
jdk8-j9-bin
AUR
jdk7-j9-bin
AUR
jdk7r1-j9-bin
AUR
Примечание
32-битные версии Oracle JDK имеют префикс
bin32-
, например,
bin32-jre
AUR
. Они используют
java32-runtime-common
AUR
, работая с
java-runtime-common
вместе с суффиксом
32
, например,
java32
. То же самое происходит и с
java32-environment-common
AUR
, который используется только 32-битными пакетами JDK.
Инструменты для разработки
См.
List of applications/Utilities#Integrated development environments
для получения списка IDE (в частности, секцию
Java IDEs
).
Чтобы усложнить процесс реверс-инжиниринга, можно воспользоваться обфускатором
proguard
AUR
.
Декомпиляторы
Bytecode Viewer
— пакет для
обратного инжиниринга
Java-приложений, включающий в себя декомпилятор, редактор и дебаггер.
https://bytecodeviewer.com
||
bytecode-viewer
AUR
CFR
— декомпилятор Java, поддерживающий также новые возможности Java 9 и выше.
https://www.benf.org/other/cfr/
||
cfr
Fernflower
— аналитический декомпилятор Java-приложений, разработанный для
IntelliJ IDEA
.
https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine
||
fernflower-git
AUR
Java Decompiler (JD-Core, JD-GUI)
—
JD Decompiler
, популярный декомпилятор, поддерживающий версии Java 1-10.
https://java-decompiler.github.io/
||
jd-gui
AUR
Krakatau
— декомпилятор, ассемблер и дизассемблер для Java.
https://github.com/Storyyeller/Krakatau
||
krakatau-git
AUR
Procyon decompiler
— экспериментальный декомпилятор Java, разработанный под влиянием ILSpy и Mono.Cecil.
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
||
procyon-decompiler
, GUI:
luyten
AUR
Recaf
— простой и современный редактор байт-кода, абстрагирующийся от сложности программ на Java
https://www.coley.software/Recaf/
||
recaf-bin
AUR
Переключение между средами
Скрипт
archlinux-java
предусматривает следующие возможности:
archlinux-java <COMMAND>

COMMAND:
       status          список установленных окружений Java и их статус
       get             короткое название текущего окружения Java
       set <JAVA_ENV>  устанавливает окружение <JAVA_ENV> по умолчанию
       unset           сбрасывает текущее окружения Java по умолчанию
       fix             исправляет ошибки конфигурации окружения Java, выбранного по умолчанию
Получение списка установленных совместимых сред Java
$ archlinux-java status
Пример:
$ archlinux-java status
Available Java environments:
   java-8-openjdk (default)
   java-11-openjdk/jre
Метка
(default)
как раз и подписывает окружение, установленное по умолчанию. Выполнение
java
или других команд будет ссылаться на эту версию. Отметка
/jre
означает, что установлен только JRE.
Установка среды Java по умолчанию
# archlinux-java set <JAVA_ENV_NAME>
Пример:
# archlinux-java set java-8-openjdk/jre
Совет
Используйте команду
archlinux-java status
для отображения списка всех доступных сред Java.
Обратите внимание, что
archlinux-java
не позволит задать некорректную среду Java. В предыдущем примере была использована установленная среда
jre8-openjdk
, а, к примеру, указание неустановленной среды
jdk8-openjdk
завершилось бы следующей ошибкой:
# archlinux-java set java-8-openjdk
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path
Сброс среды Java по умолчанию
Как правило, необходимость в сбросе среды по умолчанию отсутствует, так как данный механизм заложен в соответствующие пакеты. Если же возникла такая необходимость, воспользуйтесь командой
unset
:
# archlinux-java unset
Исправление конфигурации используемой среды Java
Если на какое-нибудь окружение Java задана неверная ссылка, команда
archlinux-java fix
попытается найти и исправить ошибку. Также эта команда задаст окружение по умолчанию, если оно отсутствует (официально поддерживаемое окружение
OpenJDK 8
имеет наивысший приоритет).
# archlinux-java fix
Запуск приложений с не установленным по умолчанию окружением
Если в системе установлено несколько окружений и необходимо запустить приложение с использованием среды не установленной по умолчанию, можно создать небольшой скрипт, локально изменяющий
PATH
. Например, если по умолчанию используется JRE 17, а необходимо воспользоваться JRE 11:
#!/bin/sh

export PATH="/usr/lib/jvm/java-11-openjdk/bin/:$PATH"
exec /путь/к/приложению "$@"
Требования к пакетам сред для поддержки archlinux-java
Примечание
Информация применима и к
archlinux32-java
, при отличии, что в названиях пакетов используется верное наименование с
32
(см.
выше
).
Этот раздел предназначен для тех, кто хочет распространять свои пакеты JVM в
AUR
и использовать для управления
archlinux-java
. Пакеты должны соответствовать всем пунктам ниже:
все файлы пакета располагаются по адресу
/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
все исполняемые файлы для
java-runtime-common
и
java-environment-common
имеют соответствующие ссылки
исполняемые файлы, не принадлежащие к
java-runtime-common
и
java-environment-common
, имеют ссылки из
/usr/bin
суффиксы
манов
такие:
-${VENDOR_NAME}${JAVA_MAJOR_VERSION}
; например, смотрите
список файлов jre8-openjdk
, где они имеют суффиксы
-openjdk8
не используется ни
PKGBUILD conflicts
, ни
PKGBUILD replaces
с другими JDK,
java-runtime
,
java-runtime-headless
или
java-environment
используется скрипт
archlinux-java
, чтобы устанавливать окружение по умолчанию, если ни одно другое окружение не задано — то есть
не перезаписывается
значение по умолчанию. Смотрите
список официально поддерживаемых окружений Java
для примера
Стоит принять во внимание и эти советы:
пакеты, которым нужно окружение Java должны объявить зависимости
java-runtime
,
java-runtime-headless
или
java-environment
пакеты, которым нужно определённое окружение Java должны объявить зависимости с необходимым суффиксом
пакеты OpenJDK объявляют
provides="java-runtime-openjdk=${pkgver}"
, что позволяет стороннему пакету объявлять зависимость от 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
или
LG3D
$ wmname compiz
После выполнения команды нужно перезапустить приложение Java. Такое поведение обосновано тем, что в JVM прямо установлены известные оконные менеджеры, которые используют подход
non-re-parenting
.
Если установка поддельного оконного менеджера не применима, есть несколько советов:
для
jre8-openjdk
добавьте строчку
export _JAVA_AWT_WM_NONREPARENTING=1
в
/etc/profile.d/jre.sh
, затем выполните
source
этого файла или перезайдите
для свежих JVM работает добавление
export AWT_TOOLKIT=MToolkit
в
~/.xinitrc
перед командой запуска оконного менеджера
для пакетов Oracle можно использовать
SetWMName
, однако, положительный эффект может быть сброшен при использовании пакета
XMonad.Hooks.EwmhDesktops
в приложении. В этом случае может помочь добавление строчки
>> setWMName "LG3D"
к
LogHook
для
sway
добавьте
export _JAVA_AWT_WM_NONREPARENTING=1
.
Смотрите также
Problems with Java applications, Applet java console
на Haskell.org.
Неразборчивый шрифт в приложениях Java
Некоторые шрифты не читаются, поэтому следует установить другие, читаемые шрифты, например,
ttf-ms-fonts
AUR
.
В некоторых приложениях отсутствует текст
Далее в разделе
#Улучшенное отображение шрифтов
приводятся параметры; см. также
FS#40871
.
Система зависает при дебаггинге
Используйте параметр JVM
-Dsun.awt.disablegrab=true
. Смотрите также
страницу бага
в JDK 6.
Конструктор JavaFX MediaPlayer вылетает с ошибкой
При создании экземпляра класса
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 и
ffmpeg
из репозитория, поэтому следует установить
ffmpeg-compat-55
AUR
. См. также
обсуждение
на Reddit.
В приложениях Java не открываются внешние ссылки
Установите
gvfs
; в приложении требуется реализовать метод
Desktop.Action.BROWSE
. См. также
обсуждение
на Launchpad.
Ошибка инициализации
QuantumRenderer
:
no suitable pipeline found
Либо отсутствует GTK2 — установите
gtk2
AUR
, либо отсутствует OpenJFX — установите
java-openjfx
AUR
.
Советы и рекомендации
Примечание
Предложения в этом разделе применимы ко всем приложениям, использующим явно установленную (внешнюю) среду выполнения Java. Некоторые приложения связаны с собственной средой выполнения или используют собственную механику для графического интерфейса пользователя, рендеринга шрифтов и т. д., поэтому ни один из нижеприведённых советов не будет работать гарантированно.
Поведение большинства приложений Java можно контролировать, предоставляя предопределённые переменные для среды выполнения Java. Для этого нужно добавлять строчки в
~/.bash_profile
или
/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
Влияет на приложения и на некоторые утилиты (например,
javac
или
jshell
).
JDK_JAVA_OPTIONS
Влияет на приложения (запущенные через команду
java
). Добавлена в Java 9.
(аргументы командной строки)
Аргументы, указанные после названия класса Java передаются в приложение.
_JAVA_OPTIONS
Устаревшая переменная, влияет и на приложения, и на утилиты.
Улучшенное отображение шрифтов
Установите параметры JVM
-Dawt.useSystemAAFontSettings=on
,
-Dswing.aatext=true
. См. статью
Java Runtime Environment fonts
Скрытие сообщения 'Picked up JDK_JAVA_OPTIONS'
При установке какого-либо параметра JVM появляется сообщение вида
Picked up JDK_JAVA_OPTIONS=...
. Чтобы избавиться от сообщения, можно удалить эту переменную окружения, а вместо неё передать параметры через аргументы командной строки. Добавьте эти строки в
~/.bashrc
:
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
Некоторые приложения используют кроссплатформенный вид
Metal
; чтобы переопределить его, используйте параметр 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
2
,
2.2
или
3
, но по умолчанию используется GTK 3; чтобы задать приоритет используйте параметр JVM
jdk.gtk.version=2.2
Ускорение отрисовки 2D
Если доступно использование
OpenGL
, его можно включить в приложениях Java, задав переменную окружения
export JDK_JAVA_OPTIONS='-Dsun.java2d.opengl=true'
Примечание
Включение этого параметра может привести к неправильной работе пользовательского интерфейса таких программ, как все IDE от JetBrains, из-за чего они частично отрисовывают окна, всплывающие окна и панели инструментов.