Java (Русский)
Ссылки по теме
Из Википедии:
"Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретенной компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года."
Arch Linux официально поддерживает открытую реализацию OpenJDK версий 7 и 8. Эти версии могут быть без проблем установлены одновременно, при этом переключение между ними производится с помощью специального скрипта archlinux-java
. Несколько других реализаций доступны в AUR, но они не поддерживаются официально.
Contents
Установка
Следующие пакеты доступны в официальных репозиториях:
- 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 |
Общие для всех 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
.
Устаревание пакетов
Хотя пакеты в 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
Обратите внимание, что, если имя указано с ошибкой, скрипт не выполнит никаких действий. В примере из предыдущего раздела, установлен пакет 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
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.
VMkit
VMkit — основанный на LLVM фреймворк для виртуальных машин с JIT. В состав VMkit входит собственная JVM — J3. J3 использует реализацию стандартной библиотеки Java GNU Classpath, но также может работать с реализациями от Apache.
Parrot VM
Parrot является виртуальной машиной, предоставляющей экспериментальную поддержку Java, которая реализуется двумя способами: либо посредством транслятора байт-кода, либо с помощью компилятора Java с поддержкой формата Parrot. Пакет parrot доступен в официальных репозиториях, а parrot-gitAUR — в 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.
Советы и рекомендации
Поведением большинства приложений 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