# Java (Русский)

Ссылки по теме

- Java package guidelines

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков 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

Примечание: 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. Пакет parrot доступен в официальных репозиториях, а parrot-gitAUR[ссылка недействительна: сохранено в aur-mirror] — в AUR.

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

### MySQL

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

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

Вы можете использовать wmname отсюда чтобы заставить JVM поверить, что используется какой-то другой оконный менеджер. Это должно решить проблемы с отображением графических приложений на Java, которые появляются в менеджерах вроде Awesome или dwm.

    $ wmname LG3D

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

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

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

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

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

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

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

The standard Java GUI toolkit has a hard-coded list of "non-reparenting" window managers. If using one that is not on that list, there can be some problems with running some Java applications. One of the most common problems is "gray blobs", when the Java application renders as a plain gray box instead of rendering the GUI. Another one might be menus responding to your click, but closing immediately.

There are several things that may help:

- For jre7-openjdk or jre8-openjdk, append the line `export _JAVA_AWT_WM_NONREPARENTING=1` in `/etc/profile.d/jre.sh`. Then, source the file `/etc/profile.d/jre.sh` or log out and log back in.
- For Oracle's JRE/JDK, use SetWMName. However, its effect may be canceled when also using `XMonad.Hooks.EwmhDesktops`. In this case, appending

     >> setWMName "LG3D"

to the `LogHook` may help.

See [1] for more information.

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

Примечание: Советы в этом разделе подходят всем приложениям, использующим внешнюю среду 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`.

### Не-репарентинговые оконные менеджеры

Для не-репарентинговых оконных менеджеров следует установить следующую переменную окружения в файле `.xinitrc`:

    export _JAVA_AWT_WM_NONREPARENTING=1

Categories:

- Programming languages (Русский)
- Русский

Hidden category:

- Pages with broken package links