This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.

Please visit our production wiki at https://wiki.gentoo.org

Java

From Gentoo Wiki (test)
Jump to:navigation Jump to:search
This page is a translated version of the page Java and the translation is 100% complete.
Resources

Java — это язык программирования, изначально разработанный Sun Microsystems, который использует исполнительную среду для выполнения приложений, разработанных на Java, на различных платформах. Он популярен среди разработчиков, создающих кросс-платформенные приложения.

Что такое Java?

Общий обзор

Java — это язык программирования, разрабатываемый инженерами Sun Microsystems. Язык является объектно-ориентированным и предназначен для запуска на различных платформах без необходимости перекомпиляции кода для каждой платформы. Хотя программа на Java и может быть скомпилирована в нативный код, изрядную долю популярности языку принесла портируемость, а также некоторые другие возможности, такие как сборка мусора. Чтобы сделать независимость от платформы возможной, компилятор Java компилирует Java-код в промежуточное представление, называемое «байт-кодом Java» (Java bytecode), которое запускается в JRE (среде выполнения Java), а не непосредственно в операционной системе.

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

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

Выбор

Gentoo предоставляет различные (среды выполнения) Java Runtime Environments (JRE) и (пакеты средств для разработчиков) Java Development Kits (JDK). В числе текущих вариантов, имеются:

Производитель JDK JRE
IcedTea Open Java SE (ранее icedtea6-bin) dev-java/icedtea и dev-java/icedtea-bin
Java от Oracle dev-java/oracle-jdk-bin dev-java/oracle-jre-bin
GCJ IcedTea GNU GCC Java (на данный момент IcedTea-7) dev-java/icedtea sys-devel/gcc USE="gcj"

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

Для установки дефолтного JDK из профиля, запустите:

root #emerge --ask virtual/jdk

Для установки дефолтного JRE из профиля, запустите

root #emerge --ask virtual/jre

Некоторые JDK и JRE, включая пакеты от Oracle, требуют принятия лицензионного соглашения конечного пользователя (End User License Agreement), или EULA. Если лицензия (например, dlj-1.1) не указана в переменной ACCEPT_LICENSE (находящейся в файле /etc/portage/make.conf), тогда JDK/JRE установить не удастся. Более подробно о том, как можно добавить допустимые лицензии в make.conf, можно прочитать в главе Лицензии Portage Handbook.

Чтобы избежать какой-либо суматохи с лицензионными ограничениями, рассмотрите установку icedtea-bin, который является открытой реализацией Java из проекта OpenJDK.

Заметка
Имейте ввиду, что JDK также включает в себя JRE; необязательно ставить JRE, если JDK уже был установлен.

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

Важно
gcj больше не поддерживается и удален из GCC версии 7.0 и выше. Он недоступен с версии GCC 6.0 в Gentoo. Эта секция больше не поддерживается.

Виртуальная машина IcedTea доступна в виде исходного кода и требует компиляции байт-кода компилятором Java. Эту начальную установку можно запустить с помощью GNU Compiler for Java (GCJ). Этот компилятор доступен, если GCC собран с USE-флагом gcj.

После того как GCC был пересобран с этим USE-флагом, можно приступить к установке пакета dev-java/icedtea. Из-за бага в Portage, пользователи должны установить dev-java/gcj-jdk и dev-java/ant-core в самую первую очередь, если эти пакеты не были установлены до этого.

root #emerge --ask --oneshot dev-java/gcj-jdk dev-java/ant-core
root #emerge --ask dev-java/icedtea:7

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

Настройка некоторых JDK и JRE требует некоторых дополнительных действий. Установите пакеты как обычно; если потребуются дополнительные действия, пакеты укажут, куда необходимо перейти и что необходимо загрузить.

Загрузите указанные файлы в каталог /usr/portage/distfiles, повторно запустите emerge, после чего установка JRE/JDK будет продолжена.

Установка headless JRE

Иногда не требуется установка полноценной JRE со всеми возможностями java. При использовании java на сервере часто не требуются такие возможности, как графический интерфейс пользователя, графика, звук или печать. Чтобы установить упрощенную JRE, иногда называемую headless, необходимо изменить некоторые USE-флаги для выбранной разновидности JRE.

Файл /etc/portage/package.useНеобходимые изменения USE-флагов
dev-java/icedtea headless-awt -alsa -cups
dev-java/icedtea-bin headless-awt -alsa -cups
dev-java/oracle-jre-bin headless-awt -alsa -cups

В зависимости от используемого профиля Gentoo, эти флаги уже могут быть установлены. Как обычно, проверить, какие USE-флаги установлены для конкретного пакета можно, запустив emerge в режиме pretend:

user $emerge --pretend --verbose virtual/jre

Настройка виртуальной машины java

Общий обзор

На Gentoo, возможна установка множества разных JDK и JRE без вызова конфликтов.

Установить общесистемную виртуальную машину java (VM), используемую по умолчанию, можно, запустив утилиту java-config с административными привилегиями. Пользователи также могут воспользоваться этой утилитой для установки пользовательской виртуальной машины.

Заметка
Также, можно воспользоваться командой eselect для изменения системной и пользовательской виртуальной машины. Обратитесь к eselect java-vm help.

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

Запуск команды java-config с опцией --list-available-vms выведет список всех JRE и JDK, установленных в системе. Ниже приведен пример работы команды:

root #java-config --list-available-vms
The following VMs are available for generation-2:
1)      IcedTea JDK 7.2.6.3 [icedtea-7]
*)      IcedTea JDK 3.0.1 [icedtea-8]
Заметка
Виртуальные машины, помеченные как 'Build Only', могут быть уязвимы с точки зрения безопасности и/или могут находиться в состоянии конца жизненного цикла (EOL). Gentoo не рекомендует использовать эти виртуальные машины в качестве системных или пользовательских. Подробнее читайте в разделе Виртуальные машины Build only.

Символ * означает, что эта виртуальная машина является активной JVM (системной или пользовательской, если последняя установлена). Имя в квадратных скобках ([]) обозначает имя или идентификатор данной виртуальной машины. Установить виртуальную машину можно, передав ее имя или номер в качестве аргумента команде java-config --set-system-vm. Следующий пример показывает, как можно установить системную виртуальную машину.

Установка системной виртуальной машины с использованием имени (рекомендуемый способ):

root #java-config --set-system-vm icedtea-7
Now using icedtea-7 as your generation-2 system JVM

Альтернативный способ: выбор виртуальной машины с помощью номера:

root #java-config --set-system-vm 3
Now using icedtea-7 as your generation-2 system JVM

В качестве обычного пользователя, запустите java-config --set-user-vm.

Заметка
После изменения пользовательской или системной виртуальной машины (VM), обычно не требуется выполнение команды source /etc/profile в открытых сеансах оболочки. Единственное исключение: такие переменные, как JAVA_HOME, будут по-прежнему указывать на старое местоположение после установки пользовательской виртуальной машины в первый раз, или будут снова указывать на системную виртуальную машину.

Виртуальные машины Build only

Некоторые виртуальные машины отмечены как build-only, вследствие завершения жизненного цикла (EOL) и/или содержащихся уязвимостей. Эти виртуальные машины не будут автоматически использоваться Gentoo для запуска приложений с использованием Gentoo launcher (скрипт, созданный для переключения виртуальных машин в Java), но все еще будут доступны для использования средой сборки Gentoo, так как некоторые пакеты могут потребовать их для сборки. Настройка такой виртуальной машины в качестве системной или пользовательской машины строго не рекомендуется, так как в таком случае она будет использоваться при запуске /usr/bin/{java,javac,...}, а также ее будут использовать пакеты, не использующие Gentoo launcher для запуска Java-приложений.

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

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

java-config также можно использовать для установки общесистемной и пользовательской переменной CLASSPATH по умолчанию.

Прежде всего, выведите все доступные библиотеки Java, установленные в системе, которые можно поместить в переменную CLASSPATH. Вот пример вывода:

root #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)
...

Опять-таки, имена в квадратных скобках являются идентификаторами для передачи команде java-config --set-system-classpath. Например:


root #java-config --set-system-classpath log4j,xerces-2
Заметка
Текущий каталог (.) не будет являться частью системного параметра classpath, так как это должно быть добавлено в профиль входа в систему.

Обновите среду, выйдя из системы и снова войдя в нее, либо с помощью команды source /etc/profile.

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

Код Запуск команд пользовательского файла classpath
if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
       source ${HOME}/.gentoo/java-env-classpath
fi

Чтобы создать общесистемный или пользовательский classpath по умолчанию, добавьте строку, подобную следующей, в профиль оболочки. Это не рекомендуется:

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

Java-плагины браузера

Управление Java-плагином браузера раньше осуществлялось посредством команды eselect java-nsplugin. Это было убрано в целях простоты. Для базового использования, установите выбранную JVM с USE-флагом nsplugin. Обратите внимание, что плагин от Oracle доступен только для архитектур amd64 и x86.

Также обратите внимание, что браузеры, основанные на Chromium, больше не поддерживают плагины на базе NPAPI, поскольку код был убран в сентябре 2015 года. Список поддерживаемых браузеров уменьшается, но по-прежнему включает в себя Firefox, на момент версии 46.

Для получения более подробной информации, включая выбор JVM, Web Start и multilib, читайте файл README, устанавливаемый с icedtea-web.

USE-флаги для использования с Java

Настройка USE-флагов

Чтобы найти больше информации по USE-флагам, обратитесь к главе USE-флаги настольной книги Gentoo.

USE-флаги

  • java флаг добавляет поддержку Java во множестве программ
  • флаг nsplugin добавляет поддержку браузеров, похожих на Mozilla (включая Firefox). Это нужно для просмотра Java-апплетов в браузерах, похожих на Mozilla.
  • флаг jce добавляет поддержку Java Cryptography Engine

Следующие USE-флаги входят в переменную JAVA_PKG_IUSE.

  • Флаг source устанавливает zip-файл с исходным кодом пакета. Это традиционно используется различными среда разработки (IDE) для 'присоединения' исходного кода к используемым библиотекам;
  • Для пакетов Java, флаг doc собирает документацию API с помощью javadoc.

Смотрите также

Внешние ресурсы

Дальнейшая информация доступна оффлайн:

  • man java-config
  • java-config --help

Предложения и вопросы, касающиеся данной статьи, присылайте на email команды Gentoo Java: java@gentoo.org


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Joshua Nichols, Karl Trygve Kalleberg, Joshua Saddler (nightmorph)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.