Java (Русский)

From ArchWiki
Jump to navigation Jump to search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

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

"Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретенной компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года."

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

Установка

Следующие пакеты доступны в официальных репозиториях:

  • OpenJDK 7:
Пакет Примечание
jre7-openjdk-headless Исполняющая среда (JRE) без графических инструментов – версия 7
jre7-openjdk Полная версия исполняющей среды (JRE) – версия 7
jdk7-openjdk Пакет разработки (JDK) – версия 7
openjdk7-doc Документация OpenJDK (javadoc) – версия 7
openjdk7-src Исходные коды OpenJDK – версия 7
  • OpenJDK 8:
Пакет Примечание
jre8-openjdk-headless Исполняющая среда (JRE) без графических инструментов – версия 8
jre8-openjdk Полная версия исполняющей среды (JRE) – версия 8
jdk8-openjdk Пакет разработки (JDK) – версия 8
openjdk8-doc Документация OpenJDK (javadoc) – версия 8
openjdk8-src Исходные коды OpenJDK – версия 8
  • OpenJDK 9:
Пакет Примечание
jre9-openjdk-headless[ссылка недействительна: replaced by jre10-openjdk-headless] Исполняющая среда (JRE) без графических инструментов – версия 9
jre9-openjdk[ссылка недействительна: replaced by jre10-openjdk] Полная версия исполняющей среды (JRE) – версия 9
jdk9-openjdk[ссылка недействительна: replaced by jdk10-openjdk] Пакет разработки (JDK) – версия 9
openjdk9-doc[ссылка недействительна: replaced by openjdk10-doc] Документация OpenJDK (javadoc) – версия 9
openjdk9-src[ссылка недействительна: replaced by openjdk10-src] Исходные коды OpenJDK – версия 9
Примечание: JDK имеет зависимость от JRE, поэтому при установке JDK будет также установлена JRE.
Примечание: После установки вам может понадобиться обновить переменную окружения $PATH. Для этого отредактируйте файл /etc/profile или перезайдите в среду рабочего стола.

Общие для всех Java-пакетов пакеты java-runtime-common и java-environment-common автоматически устанавливаются как зависимости и предоставляют файл настройки окружения /etc/profile.d/jre.sh. Этот файл содержит все переменные окружения, необходимые для работы Java-среды. Пакет java-runtime-common также предоставляет скрипт archlinux-java, который служит для установки Java-среды по умолчанию. Этот скрипт создает символические ссылки /usr/lib/jvm/default и /usr/lib/jvm/default-runtime, которые определяют текущую версию Java и текущую исполняемую среду (JVM) в /usr/lib/jvm/java-${мажорная_версия}-${имя_поставщика}. Для большинства исполняемых файлов среды Java создаются прямые ссылки в /usr/bin, остальные файлы доступны в $PATH.

Важно: Файл /etc/profile.d/jdk.sh больше не предоставляется ни одним из пакетов.

Устаревание пакетов

Хотя пакеты в Arch Linux могут иметь проприетарные версии пакетов в качестве зависимостей, открытая реализация имеет свою систему версий:

  • Пакеты jre7-openjdk, jdk7-openjdk и jre7-openjdk-headless должны помечаться как устаревшие в зависимости от версии IcedTea (например, 2.4.3), а не их версии реализации от Oracle (например u45 в выпуске 7.u45_2.4.3-1).
  • Пакет icedtea-web должен помечаться как устаревший в зависимости от версии IcedTea Web (например, 1.4.1), и независимо от версии IcedTea.

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

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

archlinux-java <COMMAND>

COMMAND:
   status              Вывести список установленных сред Java
   get                 Вывести короткое имя среды Java, установленной по умолчанию
   set имя_среды   Установить среду имя_среды в качестве среды по умолчанию
   unset               Сбросить текущую установку среды Java по умолчанию
   fix                 Исправить нарушенную конфигурацию среды Java по умолчанию

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

$ archlinux-java status

Пример:

$ archlinux-java status
Available Java environments:
  java-7-openjdk (default)
  java-8-openjdk/jre

Обратите внимание на слово (default), которым помечается текущая выбранная среда Java, в данном примере — java-7-openjdk. Запуск конкретного файла java и других исполняемых файлов среды зависит от этой настройки. Также обратите внимание, что в приведенном примере установлена только исполняющая среда (JRE) из состава OpenJDK 8.

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

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

Пример:

# archlinux-java set java-8-openjdk/jre
Совет: Используйте команду archlinux-java status для отображения списка всех доступных сред Java.

Обратите внимание, что, если имя указано с ошибкой, скрипт не выполнит никаких действий. В примере из предыдущего раздела, установлен пакет jre8-openjdk, но не jdk8-openjdk, поэтому имя среды java-8-openjdk в данном случае неверно:

# archlinux-java set java-8-openjdk
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path

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

Обычно, нет необходимости сбрасывать установку среды Java по умолчанию. Если вы все-таки хотите это сделать, используйте команду unset, чтобы никакая среда более не использовалась:

# archlinux-java unset

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

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

# archlinux-java fix

Запуск приложения с другой версией Java

Если вы хотите запускать отдельное приложение с какой-нибудь другой установленной версией Java, не обязательно каждый раз перед этим устанавливать ее в качестве среды по умолчанию: вы можете использовать простой скрипт, который настроит окружение специально для запуска вашего приложения. Например, если по умолчанию используется jre7, а вы хотите использовать jre8:

#!/bin/sh

export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH
exec /path/to/application

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

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

  • Помещать все файлы в /usr/lib/jvm/java-${номер_мажорной_версии}-${имя_поставщика} .
  • Убедиться, что все исполняемые файлы для которых пакетами java-runtime-common и java-environment-common создаются ссылки присутствуют собираемом пакете.
  • Предоставлять ссылки из /usr/bin к исполняемым файлам только если файлы ссылок не принадлежат пакетам java-runtime-common и java-environment-common.
  • Имена man-страниц должны оканчиваться на -${номер мажорной версии}-${имя поставщика} для избежания конфликтов (пример смотрите в списке файлов jre8-openjdk, где имена man-страниц оканчиваются на -openjdk8).
  • Не объявлять пакеты других сред Java, java-runtime, java-runtime-headless или java-environment как конфликтующие, а также в качестве замещаемых.
  • Использовать archlinux-java в целях установки, чтобы установить среду Java по умолчанию если в данный момент уже не установлена подходящая среда (то есть, пакеты не должны принудительно устанавливать какую-либо среду Java по умолчанию). Используйте исходные коды официально поддерживаемого пакета исполняемой среды Java в качестве примера.

Также, пожалуйста, имейте в виду, что:

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

Неподдерживаемые среды Java из AUR

Важно: Пакеты в AUR могут не поддерживать archlinux-java.

Java SE

Несколько пакетов в AUR предоставляют реализации JDK и JRE от Oracle, из них основными являются jreAUR и jdkAUR.

Java SE 6/7

Предыдущие версии JRE и JDK доступны с пакетами jre6AUR/jre7AUR и jdk6AUR/jdk7AUR соответственно.

Oracle JRockit

JRockit — проприетарная реализация JVM с JIT от Oracle. Установку можно произвести через пакет jrockitAUR[ссылка недействительна: сохранено в aur-mirror].

VMkit

VMkit — основанный на LLVM фреймворк для виртуальных машин с JIT. В состав VMkit входит собственная JVM — J3. J3 использует реализацию стандартной библиотеки Java GNU Classpath, но также может работать с реализациями от Apache.

Parrot VM

Parrot является виртуальной машиной, предоставляющей экспериментальную поддержку Java, которая реализуется двумя способами: либо посредством транслятора байт-кода, либо с помощью компилятора Java с поддержкой формата Parrot. Пакет parrotAUR доступен в официальных репозиториях, а parrot-gitAUR[ссылка недействительна: сохранено в aur-mirror] — в AUR.

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

MySQL

По причине того факта, что JDBC-драйверы часто используют порт из URL для установки соединения с базой данных, это соединение считается удаленным (другими словами, MySQL не слушает на порту в соответствии с настройками по умолчанию), несмотря на то, что оно может быть на том же хосте. Таким образом, чтобы использовать JDBC и MySQL вам следует включить удаленный доступ к MySQL, следуя инструкциям на странице MySQL#Grant remote access[broken link: invalid section].

Маскировка под другой оконный менеджер

Можно воспользоваться утилитой wmname от suckless.org, чтобы предоставить JVM название другого оконного менеджера. Это должно решить проблемы с отображением графических приложений на Java, которые появляются в оконных менеджерах вроде awesome, Dwm или Ratpoison. Попробуйте значения "compiz" или "LG3D":

$ wmname compiz

После выполнения команды перезапустите Java-приложение.

Это работает, потому что в JVM содержится закодированный список "non-re-parenting" оконных менеджеров. Что интересно, некоторые пользователи предпочитают маскировать свои менеджеры под LG3D написанный Sun на Java, однако также являющийся "non-re-parenting".

Шрифты отображаются размыто

Даже после выполнения всех рекомендаций в разделе #Улучшенное отображение шрифтов некоторые шрифты все ещё могут отображаться размыто. Если это так, попробуйте установить шрифты от Microsoft. Установите ttf-ms-fontsAUR из AUR.

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

Если в приложении совсем не отображаются никакие надписи, посмотрите советы в разделе #Советы и рекомендации, как предлагается в FS#40871.

Серое окно | Приложения не изменяют размер с WM | Меню сразу закрываются

Стандартный тулкит Java для графических приложений содержит закодированный список "non-re-parenting" оконных менеджеров. Если используется WM не из этого списка, то вы можете столкнуться с различными проблемами в Java-приложениях. Самые частые — это "серые окна", когда Java-приложение отрисовывает серое окно вместо самого интерфейса. Также возможна проблема, когда меню раскрывается при нажатии, но тут же пропадает.

Несколько способов выйти из ситуации:

  • В случае с jre7-openjdk или jre8-openjdk добавьте строку export _JAVA_AWT_WM_NONREPARENTING=1 в /etc/profile.d/jre.sh, после чего выполните source над файлом /etc/profile.d/jre.sh или перезайдите в свой аккаунт.
  • В случае с последней версией JDK и приложениями на AWT (например, IntelliJ IDEA) добавьте строку export AWT_TOOLKIT=MToolkit в ~/.xinitrc перед запуском оконного менеджера.
  • Также можно попробовать воспользоваться wmname, указав wmname compiz в ~/.xinitrc.
  • В случае с Oracle JRE/JDK используйте SetWMName. Заметьте, что данный параметр может не вступить в силу при использовании XMonad.Hooks.EwmhDesktops. В таком случае добавьте >> setWMName "LG3D" в LogHook.

См. [1] для получения более подробной информации.

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

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

Поведением большинства приложений Java можно управлять, передавая переменные в исполняемую среду Java. Как предлагают на форуме, сделать это можно добавлением указанной строки в ваш файл ~/.bashrc (или /etc/profile.d/jre.sh для программ, при запуске которых среда не инициализируется из ~/.bashrc, например, если программа запускается из Applications view в Gnome):

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

Например, чтобы включить сглаживание шрифтов и оформление GTK по умолчанию:

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

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

Обе реализации Java, открытая и закрытая, имеют недостатки в реализации сглаживания шрифтов. Это может быть исправлено указанием следующих параметров:

awt.useSystemAAFontSettings=on, swing.aatext=true

Смотрите также Шрифты в исполняемой среде Java для получения подробной информации.

Оформление GTK

Если ваши Java-приложения выглядят отвратительно, вам, вероятно, сможет помочь смена оформления по умолчанию на тему GTK для компонентов Swing: swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel.

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

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