Единственная версия java, которая не тормозит
Opera использует Java Runtime Environment (JRE) напрямую, а не через plug-in, как это реализовано в других браузерах. Для проверки работоспособности Java можно использовать следующий тестовый апплет. Если ничего похожего на java-апплет не отображается или броузер пишет сообщение об ошибке, делаем следующее.
- Проверяем, есть ли в системе библиотеки libjava.so и libawt.so:
locate libjava.so
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386/libjava.so
locate libawt.so
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386/libawt.so
Если эти два файла не найдены, то устанавливаем соответствующий пакет (его имя зависит от дистрибутива). В случае с Fedora это java-1.6.0-openjdk. А вообще название пакета можно определить с помощью чудесного сервиса RPMFIND.
- Заходим в меню оперы "Tools"-"Preferences"-"Content", устанавливаем галочку "Enable Java", жмем рядом кнопку "Java Options..." и указываем в диалоговом окошке путь к директории, где обитают две вышеупомянутых библиотеки. Жмем кнопку "Validate Java Path", если не ругается, перезапускаем браузер.
- После перезапуска опять проверям работу java, на этот раз тестовый апплет должен заработать.
UPDATE для Opera 11.01 на CentOS 5.5 x86_64 и Fedora 14: в меню Preferences уже нет галочки "Enable Java", теперь последовательность немного другая.
- Смотрим где лежит libjavaplugin:
[root@sunrise ~]# locate libjavaplugin
/usr/java/jre1.6.0_23/lib/amd64/libjavaplugin_jni.so
- Заходим в настройки Оперы в меню "Инструменты" - "Общие настройки" - "Содержимое", жмём кнопку "Настроить плагин..." и добавляем найденный путь /usr/java/jre1.6.0_23/lib/amd64 к списку директорий, где искать плагины:
Скриншот оперы, указание пути к Java runtime environment
После этого в списке плагинов появляется ещё и "Java(TM) Plugin" и java начинает работать даже без перезапуска броузера, что можно проверить опять же с помощью вышеупомянутого тестового апплета.
Firefox
Для броузера firefox (проверялось на версии 3.6.17 в fedora 14) включение java можно делать так:
- Смотрим есть ли какие-то связанные с java плагины в /usr/lib/mozilla/plugins и путем просмотра инфы на странице со служебным адресом about:plugins. Если там что-то есть, то соответствующий .so-файл удаляем.
- Ищем библиотеку libnpjp2.so, если находим несколько, то выбираем ту, которая находится в директории, соответствующей JRE нужной нам версии:
$ locate libnpjp2.so
/usr/java/jre1.6.0_26/lib/i386/libnpjp2.so
- Создаем символическую ссылку на найденную библиотеку в директорию ~/.mozilla/plugins (если требуется включить java только для одного пользователя) или в /usr/lib/mozilla/plugins (если требуется включить java для всех пользователей системы):
$ cd ~/.mozilla/plugins/
$ ln -s /usr/java/jre1.6.0_26/lib/i386/libnpjp2.so
Если после этого java всё еще не работает, нужно проверить, что все другие java-плагины удалены (отсутствуют симлинки на них и их не видно на странице about:plugins). Даже если ненужный плагин выключен (но не удалён) и его видно "Tools - AddOns - Plugins" серым цветом, он может мешать работе нужного плагина. Проверено лично (в моем случае выключенный /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/lib/amd64/IcedTeaPlugin.so не давал работать включенному /usr/java/jre1.6.0_26/lib/amd64/libnpjp2.so - на странице проверки jav-ы http://www.java.com/en/download/testjava.jsp писало "Something wrong, java not working") - только после удаления симлинки
$ ls -l /usr/lib64/mozilla/plugins/libjavaplugin.so
lrwxrwxrwx 1 root root 64 Июн 16 11:39 /etc/alternatives/libjavaplugin.so.x86_64 -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/lib/amd64/IcedTeaPlugin.so
# unlink /usr/lib64/mozilla/plugins/libjavaplugin.so
родной плагин от Oracle (libnpjp2.so) заработал нормально.
Дополнительную информацию о плагинах можно почитать на http://plugindoc.mozdev.org/
Google chrome
Хром использует плагины, найденные в директории /usr/lib/mozilla/plugins (или /usr/lib64/mozilla/plugins если у вас 64-битная версия ОС). Поэтому настройка тут в общем аналогичная firefox-у. Проверить какие плагины установлены в chrome можно на служебной странице chrome://plugins/.
Выбор нужной JVM
Если в системе установлено несколько JVM (например, при установке openoffice он тянет за собой openjdk, который значительно отличается от "классической" SunOracle-овской Java Virtual Machine), то заставить приложения работать именно с нужной Вам JVM можно следующим образом. Пусть для примера мы только что установили jre-6u26-linux-i586.rpm и хотим чтобы java использовалась именно отсюда.
- Смотрим какие симлинки предоставляют бинарник java:
$ update-alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
*+ 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
2 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
Как видно, нужного нам бинарника от версии 1.6.0_26 тут нет, поэтому нужно его добавить.
- Добавляем еще одну симлинку на нашу свежеустановленную джаву:
# update-alternatives --install /usr/bin/java java /usr/java/jre1.6.0_26/bin/java 50
- И выбираем её как master link (подробности в man alternatives):
# update-alternatives --config java
There are 3 programs which provide 'java'.
Selection Command
*+ 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
2 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
3 /usr/java/jre1.6.0_26/bin/java
Enter to keep the current selection[+], or type selection number: 3
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
- Проверяем, что симлинка /usr/java/latest указывает на нужную нам версию и при необходимости меняем:
$ ls -la /usr/java/
total 12
drwxr-xr-x 3 root root 4096 Jun 26 18:42 .
drwxr-xr-x. 13 root root 4096 Jun 26 18:41 ..
lrwxrwxrwx 1 root root 16 Jun 26 18:42 default -> /usr/java/latest
drwxr-xr-x 7 root root 4096 Jun 26 18:41 jre1.6.0_26
lrwxrwxrwx 1 root root 21 Jun 26 18:42 latest -> /usr/java/jre1.6.0_26
Отличия между различными JVM
Какую JVM выбрать зависит во многом от задач, которые требуется решать с их помощью. Иногда даже приходится на одном компе держать несколько разных Java-машин. Ниже список эмпирически открытых особенностей, которые, возможно, кому-то пригодятся.
– Замечено, что в Fedora 15 Cisco WebEx отказался нормально работать с JRE от Oracle версии 1.7.0_04 (при попытке подсоединиться к аудио-конференции вылазило окошко с ошибкой "audio device is unaccessible now". В то же время WebEx работал нормально с OpenJDK Runtime Environment (IcedTea6 1.10.4), симлинка /etc/alternatives/libjavaplugin.so при этом указывала на файл /usr/lib/jvm/jre-1.6.0-openjdk/lib/i386/IcedTeaPlugin.so
– Клиент-банк iBank2 от конторы BIFIT по состоянию на 2011-ый год не работал с OpenJDK, но работал нормально с Oracle JRE.
– Веб-интерфейсы многих IPKVM-ов/DRAC/iLo-карт для удалённого доступа к консоли серверов не работали вообще или глючили под OpenJDK, но работали нормально с Oracle JRE
ПРИМЕЧАНИЕ: Если у вас 64-битная версия ОС (проверить можно командой "uname -a"), то везде вместо директории /usr/lib/mozilla/plugins следует использовать /usr/lib64/mozilla/plugins.