Gentoo и Java



Руководство по настройке Java в Gentoo



Ссылка на оригинал: http://www.gentoo.org/doc/en/java.xml

+ http://ru.wikipedia.org/wiki/Java

Перевод + дополнения: Батогов Е.В a.k.a. JohnBat26

С версии: 1.0.

Обновлено в: 1.4

Дата оригинала: 01.01.2008

Дата перевода: 28.01.2008



1. Что такое Java ?

Введение


Java — (произносится /ˈdʒɑːvə/) — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Многие люди, говоря на русском, называют язык «Ява» по аналогии с географическим названием.

Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания апплетов, приложений и серверного программного обеспечения.

Этот объектно-ориентированный язык, разработанный для запуска на множестве платформ без необходимости повторной компиляции кода для каждой платформы. Хотя программа, написанная на Java, может быть скомпилирована как родная для конкретной платформы, наибольшую популярность Java принесла её переносимость, наряду с другими функциями, такими как сборка мусора (garbage collection).

Программы на Java могут быть транслированы в байт-код, выполняемый на виртуальной джава-машине (JVM) — программе, обрабатывающей байтовый код и передающей инструкции оборудованию, как интерпретатор, но с тем отличием, что байтовый код в отличие от текста обрабатывается значительно быстрее.

Достоинство подобного способа выполнения программ — в полной независимости байт-кода от ОС и оборудования, что позволяет выполнять Java приложения на любом устройстве, которое поддерживает виртуальную машину. Другой важной особенностью технологии Java является гибкая система безопасности, благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Это позволяет пользователям загружать программы, написанные на Java, на их компьютеры (или другие устройства, например, мобильные телефоны) из неизвестных источников, при этом не опасаясь заражения вирусами, пропажи ценной информации, и т. п.

Часто к недостаткам этого подхода относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии JITs (Just-In-Time compiler), позволяющей переводить байт-код в машинный код во время исполнения программы с возможностью сохранения версий класса в машинном коде, широкое использование native-кода в стандартных библиотеках, а также аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Внутри Java существуют 3 основных семейства технологий:

Последней версией является версия 1.6, в которой было произведено улучшение системы безопасности, улучшение поддержки XML и скриптового языка Mozilla Rhino, улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

Таким образом байт-код запускается на так называемой JRE (Java Runtime Environment — Java-окружение времени выполнения ), а не напрямую операционной системой. Следовательно, для выполнения Java-байткода мы нуждаемся в установленной JDK(Java Runtime Environment). JRE включает в себя основные библиотеки, независимую от платформы - виртуальную Java-машину, плагины для браузеров и многое другое. JDK (Java Development Kit — набор для Java-разработчика) добавляет средства программирования, такие как компилятор байткода и отладчик.


2. Перед тем как начать


Если у Вас уже установлена Java, тогда удостоверьтесь, что Вы следовали Java Upgrade Guide.

Новая установка не требует дополнительных приготовлений.



3. Установка виртуальной машины

Варианты

Gentoo сопровождает многочисленные Runtime Environments (JREs) и Development Kits (JDKs). Среди всех предлагаемых вариантов имеются:









Поставщик

JDK

JRE

The Blackdown Java Kit

dev-java/blackdown-jdk

dev-java/blackdown-jre

Sun's Java Kit

dev-java/sun-jdk

dev-java/sun-jre-bin

The IBM Java Kit

dev-java/ibm-jdk-bin

dev-java/ibm-jre-bin

BEA WebLogic's J2SE Development Kit

dev-java/jrockit-jdk-bin

----------------------------


Таблица 3.1: Выбор JDKs/JREs в Gentoo Linux


Пара Blackdown JRE/JDK используется по умолчанию для версии 1.4., т.к. Она свободна доступна без дополнительных регистраций. JREs и JDKs от Sun, IBM, и BEA конечно быстрее, но их получение требует немного больше усилий, таких как чтение и подтверждение лицензии перед загрузкой (IBM дополнительно требует Вашей регистрации).

Установка JRE/JDKs

Для установки JDK, принятой по умолчанию для Вашего профиля запустите:

emerge virtual/jdk.

Или для установки JRE, принятой по умолчанию для Вашего профиля, запустите:

emerge virtual/jre.

Недавно Sun провел повторное лицензирование своих JDK и JRE под более дружественной к Linux лицензией. В результате этого, Sun выпустил версию Java 1.5 и выше как свободно загружаемые, без дополнительных трудностей.

Примечание: JDK также включает и JRE, поэтому установив JDK, Вам не нужно устанавливать JRE

Установка других, немного ограничивающих их получение, виртуальных машин

Как уже упоминалось, некоторые из JDKs и JREs требуют, чтобы Вы совершили несколько дополнительных действий перед установкой. Просто запустите emerge для этих пакетов как Вы обычно это делаете. Ebuilds (сборочные файлы) в последствии сообщат Вам, куда идти и что скачать. Затем Вам следует загрузить указанные файлы в каталог: /usr/portage/distfiles. После этого, Вы можете повторно запустить команду emerge, которая на этот раз установит данную JRE/JDK.

4. Настройка Вашей виртуальной машины

Введение

Gentoo способен иметь множество установленных JDKs и JREs без появления каких-либо конфликтов.

Используя средство java-config, Вы можете установить умолчания для всей системы (удостоверьтесь, что Вы имеете доступ под root). Пользователи могут также использовать java-config, для установки их персональных настроек по умолчанию.

Примечание: Вы также можете использовать eselect для изменения системной и пользовательской виртуальной машины. Смотрите eselect java-vm help.


Установка виртуальной машины по умолчанию

Запущенная команда java-config --list-available-vms даст Вам список всех JREs и JDKs, установленных на Вашей системе. Здесь приведен пример вывода этой команды:



Листинг 4.1 Список доступных виртуальных машин.

# java-config --list-available-vms

The following VMs are available for generation-2:

1) Blackdown JDK 1.4.2.03 [blackdown-jdk-1.4.2]

2) Blackdown JRE 1.4.2.03 [blackdown-jre-1.4.2]

3) Blackdown 32bit JRE 1.4.2.03 [emul-linux-x86-java-1.4.2]

4) Sun 32bit JRE 1.5.0.08 [emul-linux-x86-java-1.5]

5) Kaffe 1.1.7 [kaffe]

*) Sun JDK 1.5.0.08 [sun-jdk-1.5]


Символ * показывает текущую активную виртуальную машину (system-vm или user-vm). Имя в скобках ([]) это описатель или номер для конкретной VM. Вы можете использовать описатель или номер для команды: java-config —set-system-vm. Здесь приведён пример по установке системной VM:



Листинг 4.2 Установка системной виртуальной машины (system-vm)

(По описателю (предпочтительней))

# java-config --set-system-vm blackdown-jdk-1.4

Now using blackdown-jdk-1.4 as your generation-2 system JVM

(По номеру)

# java-config --set-system-vm 6

Now using sun-jdk-1.5 as your generation-2 system JVM


Как обычный пользователь, Вы можете использовать: java-config --set-user-vm

Примечание: Вам нет необходимости изменять профиль для смены user/system VM.

Установка предпочтительной виртуальной машины

Во время установки различных Java пакетов, виртуальная машина может и будет переключена так, как требуется.

Из-за того, что доступно большое множество виртуальных машин, мы не имеем ресурсов для тестирования и проверки работы каждого пакета их всех. Таким образом, для гарантии того, что все пакеты установятся гладко и правильно, мы определили список по умолчанию/поддерживаемых виртуальных машин на каждую архитектуру. Вы можете найти этот список в файле: /usr/share/java-config-2/config/jdk-defaults.conf. Когда Вы устанавливаете Java пакеты (через portage), то он обнаруживает одну из этих виртуальных машин в том файле и будет автоматически использовать ту VM, вместо системной VM. Во время установки VM переключается если это необходимо когда, например, ваша системная VM установлена на версию 1.4, но пакет, который Вы устанавливаете, требует как минимум VM версии 1.5. Во время установки он будет использовать предпочтительную версию 1.5 VM, оставляя вашу системную VM не тронутой.

Конечно, Gentoo всегда предлагает выбор, поэтому Вы можете переопределить эти установки по умолчанию в файле: /etc/java-config-2/build/jdk.conf и будете иметь полный контроль тем, какая VM будет использована. Несколько примеров:


Листинг 4.3 Пример файла: /etc/java-config-2/build/jdk.conf

(Я хочу всегда использовать sun-jdk, т.е sun-jdk-1.4 для 1.4, sun-jdk-1.5 для 1.5, и так далее)

*=sun-jdk


Листинг 4.4 Пример файла: /etc/java-config-2/build/jdk.conf

(Я хочу всегда использовать sun-jdk-1.5 когда возможно, за исключением случаев, когда 1.3 или 1.4 VM явно необходимы)

*=sun-jdk-1.5


Листинг 4.5 Пример файла: /etc/java-config-2/build/jdk.conf

# Для 1.3 я предпочитаю sun-jdk 1.4, но когда она недоступна необходимо использовать ibm-jdk-bin,

# Для 1.4, использовать blackdown-jdk, а для 1.5, использовать sun-jdk

1.3=sun-jdk-1.4 ibm-jdk-bin

1.4=blackdown-jdk

1.5=sun-jdk


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


5. Компиляторы

Стандартным Java-компилятором, используемым для сборки, является: javac. Он поставляется с каждым JDK. В добавление к настройке виртуальной машины, используемой на этапе сборки, также возможно настроить какой компилятор использовать. Вы определяете список предпочтительных компиляторов в файле: in /etc/java-config-2/build/compilers.conf.


Листинг 5.1 файл /etc/java-config-2/build/compilers.conf

# If the ebuild supports it

# it will check the COMPILERS var front to back and

# use the first compiler that is installed


COMPILERS="ecj-3.1 jikes javac"


Некоторый компиляторы не поддерживают все возможные параметры -target и -source. Как бы то ни было, каждый компилятор в этом списке проверяется, может ли он поддерживать желаемые -source/-target. javac будет работать во всех случаях, когда ни одного подходящего компилятора не найдено. Более детально о каждом компиляторе показано в таблице ниже:


Наименование

Описатель

Пакет

Подробности

javac

javac

N/A

Это компилятор по умолчанию, поставляется с каждой JDK

jikes

jikes

dev-java/jikes

Jikes был изначально разработан IBM. Это анекдот, но он обычно быстрее чем javac. Тем не менее он более педантичный и падает в тех случаях, в которых javac не имеет проблем. Jikes пока не поддерживает синтаксис Java 1.5

Eclipse Compiler for Java

ecj-3.1

=dev-java/eclipse-ecj-3.1*

Этот компилятор используется в Eclipse SDK. Он является достаточно функциональным и быстрым. Также поддерживает синтаксис Java 1.5


6. Установка переменной CLASSPATH по умолчанию

Предупреждение: Опции, рассмотренные в этом разделе являются устаревшими, и будут удалены в будущем. Мы очень рекомендуем не использовать их, так как Ваши Java проекты или приложения могут идеально управлять своими classpaths. Если Вы определили специфичный CLASSPATH по умолчанию, то некоторые приложения могут повести себя неожиданно, так как классы могут вдруг появиться в classpath.



java-config может использоваться для установки системного CLASSPATH, так же как и пользовательского CLASSPATH. Во-первых Вам необходимо получить список доступных java библиотек, установленных в Вашей системе, которые Вы желаете поместить в CLASSPATH. Далее приведен пример:

Листинг 6.1: Список классов

# java-config --list-available-packages

[xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)

[junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)

[bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)

[bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)

[log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)

...

И вновь, имена в скобках ([]) являются ID для передачи в java-config —set-system-classpath. Здесь пример:


Листинг 6.2 Установка CLASSPATHs.

# java-config --set-system-classpath log4j,xerces-2


Примечание: заметьте, что текущая директория (.) не является частью системного CLASSPATH, и должна быть добавлена в пользовательский профиль


Для обновления Вашего окружения, выйдите их системы, и зайдите вновь. Можно еще сделать

source /etc/profile

Для пользователей,java-config —set-user-classpath создаст ~/.gentoo/java-env-classpath, который будет затем использоваться в вашем консольном профиле.

Листинг 6.3 Установка пользовательского classpath.

if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then

source ${HOME}/.gentoo/java-env-classpath

fi


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


Листинг 6.4 Установка CLASSPATH

export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"


7. Java-плагины для браузера

Установка плагина

Вы можете установить Java плагин для Вашего Web браузера путем запуска emerge для Java VM c включенным флагом nsplugin.

Примечание: nsplugin недоступен для всех архитектур. Для проверки доступности плагинов для вашей архитектуры, перед установкой Java VM выполните:

emerge -pv <java-vm>

Portage позволяет установить Вам множество версий плагинов, но только один будет использоваться браузером. Вы можете проверить список доступных плагинов, запустив:


Листинг 7.1: Просмотр доступных плагинов

# eselect java-nsplugin list

[1] sun-jre-bin-1.5

[2] blackdown-jre-1.4.2


В примере ниже, sun-jre-bin устанавливается в качестве плагина для браузера:



Листинг 7.2: Выбор плагина

# eselect java-nsplugin set sun-jre-bin-1.5


Проверка, что правильный плагин был выбран:


Листинг 7.3 Проверка правильности выбора плагина

# eselect java-nsplugin list

[1] sun-jre-bin-1.5 current

[2] blackdown-jre-1.4.2


Ресурс http://java.com также предоставляет ссылку для проверки правильности установки плагина. Дополнительно, если Вы используете браузер, основанный на Mozilla (например Firefox), тогда Вы можете проверить Ваш Java плагин, просто введя: about:plugins в адресной строке.


Плагины на системах с множеством библиотек.

Если Вы работаете на смешанной 64-битной и 32-битной системе (например: на AMD64), то можете использовать только 32-битные плагины.

Для использования 32-битного плагина, Вам необходимо выполнить:

emerge emul-linux-x86-java

с включенным USE-флагом nsplugin.

Листинг 7.4 Установка 32-битного плагина.

# echo "app-emulation/emul-linux-x86-java nsplugin" >> /etc/portage/package.use

# emerge emul-linux-x86-java


Далее проверьте, какие плагины вообще доступны:


Листинг 7.5 Просмотр доступных плагинов.

# eselect java-nsplugin list

Available 32-bit Java browser plugins

[1] emul-linux-x86-java-1.4.2

[2] emul-linux-x86-java-1.5


Хотя, Вы должны выбрать 32-битный браузер (такой как mozilla-firefox-bin) для использования с Вашим 32-битным плагином, 64-битная версия konqueror использует Вашу Java VM напрямую. Таким образом, возможно использовать 64-битную версию blackdown с этим браузером без дополнительных настроек.

Теперь выберите правильный плагин для Вашего 32-битного браузера:

Листинг 7.6 Выбор плагинов

# eselect java-nsplugin set 32bit emul-linux-x86-java-1.5


Проверка, что правильные плагины были выбраны.


Листинг 7.7 Проверка правильного плагина

# eselect java-nsplugin list

Available 32-bit Java browser plugins

[1] emul-linux-x86-java-1.4.2

[2] emul-linux-x86-java-1.5 current


8.  USE флаги, используемые с Java

Установка USE флагов.

Для получения дополнительной информации относительно USE флагов, смотрите главу USE флаги в настольной книге Gentoo

Флаги*:


9.  Дополнительные ресурсы

Off-line ресурсы:

Online ресурсы


Руководство по обновлению Java в Gentoo

Ссылка на оригинал: http://www.gentoo.org/proj/en/java/java-upgrade.xml

Перевод: Батогов Е.В a.k.a. JohnBat26

С версии: 1.4.

Дата оригинала: 19.10.2006

Дата перевода: 29.01.2008

1. Введение

Привет и добро пожаловать. Теперь Вы можете спросить: "почему я могу захотеть обновлять Java?". Или, вероятно, вы начали процесс и получили ссылку на эту страницу после ошибки в течение выполнения emerge? Несмотря ни на что, целью этого документа является помощь Вам в процессе обновления на новую Java систему. Но чем же является эта новая Java система.



Новая Java система

Для тех, кто не знаком с новой Java системой, здесь приведен список новых возможностей:


Терминология/ основные понятия

Теперь, когда Вы знаете идею того, что получаете... далее приводится несколько терминов и понятий, которые Вы можете найти полезными перед началом.



Поколение (Generation)

Это новое понятие. Смысл состоит в том, что поколение это множество средств и eclasses для сборки Java пакетов. В некоторое время мы начнем переходить с существующего поколения на новое. В течение этого времени, оба поколения существуют вместе в Вашей системе и в дереве портежей. Так например, Вы можете иметь системную VM для поколения 1 и системную VM для поколения 2. Для достижения этого, пакеты которые используют поколение 1 и поколение 2 могут сосуществовать, пока происходит миграция на новое поколение.


Поколение 1 (Generation 1)

Это поколение состоит из существующих eclasses (java-pkg, java-utils, и java) и

java-config-1. Поколение 1 это устаревшая, постепенно уходящая, система.

Поколение 2 (Generation 2)

Это поколение состоит из новых eclasses (java-pkg-2, java-pkg-opt-2, java-ant-2, и java-utils-2) и новой версии java-config. Это поколение, куда мы постепенно мигрируем.

Поколение 1 Системная VM

Эта VM используется для установки Java пакетов, используя eclasses из Поколения 1. Она устанавливается следующим образом:

java-config-1 --set-system-vm <choice of vm>.

Поколение 2 Системная VM

C Поколением 1, системная VM используется только для root и для пользователей, которые не имеют установленной пользовательской VM

Поколение 2 Сборочная VM

Поколение 2 вводит новый класс VM. Сборочная VM используется во время установки для сборки Java пакетов. Она изменяется, как того требует зависимости от пакетов. Например, если пакет собирается только с версией 1.4, то VM версии 1.4 и будет использоваться. Умолчания определены в файле: /usr/share/java-config-2/config/jdk-defaults.conf. Дополнительно сборочная VM может быть настроена в файле:/etc/java-config-2/build/jdk.conf.


2.  Обновление java-config

Новый пакет java-config-wrapper, блокируется старыми версиями java-confg, так что нам следует удалить его сначала:

Листинг 2.1: Удаление старого java-config

# emerge -C java-config

Теперь нам необходимо установить новую версию java-config:

Листинг 2.2: Установка нового java-config

# emerge -1 "=java-config-1*" "=java-config-2*"

3. Проверка вашего окружения

У нас теперь есть новый скрипт: java-check-environment. Как можно догадаться из его названия, он проверяет правильность Вашего окружения Java. Потом он советует, какие действия Вы можете предпринять для исправления найденных проблем. Таким образом, теперь запустите:



Листинг 3.1: Проверка Вашего окружения

# java-check-environment

Если java-check-environment обнаружит проблему, остановится и скажет Вам о том как её исправить. Следуйте этим советам, и повторно запускайте java-check-environment, пока он не найдет никаких проблем.

4. Обновление ... завершено!

Если Вы дошли до этого места, значит Вы успешно перешли на новую Java систему. Поздравляем !

Теперь, когда Вы обновились, Вы можете захотеть взглянуть на нашу обновленную документацию:



5. Общие проблемы и вопросы

Для решения общих проблем, Java team имеет свою wiki страницу здесь. Перед поиском помощи, или отправкой отчета о проблеме, пожалуйста, ознакомьтесь с этой страницей.

*Для более удобной установки USE-флагов, используйте ufed (Use Flag Editor) (emerge ufed)

15