Чем openjdk отличается от oracle jdk
Начал изучать Java и столкнулся с трудностью установки JDK. На офф. сайте Oracle предлагают коммерческую версию с сомнительными условиями соглашения. Начитался я про них много всякого. Моя задача: изучать язык для личного написания под Android. Что мне скачать и где? Все слишком запутано и туманно. Что будет если я использую Oracle JDK для коммерческих целей?
Oracle JDK компилируется из исходников OpenJDK. Функционально они полностью идентичны. Разница только в том, что Oracle JDK предоставляет коммерческую лицензию с поддержкой.
OpenJDK - не коммерческая.
Oracle - коммерческая (тоже самое + поддержка).
Вот и вся разница.
Если вам есть что сказать или пояснить свою позицию - пожалуйста, буду рад конструктивной дискуссии.
Как уже отметили выше, нет никакой технической разницы между Oracle JDK и OpenJDK. Но как только возникает вопрос в решении проблем, то работа с Oracle (через покупку лицензии) выходит только в плюс, ведь Oracle является основным и самым крупным контрибьютором OpenJDK. Решение любых проблем связанных с Java становится непосредственной проблемой Oracle, а не вашей! Более того, указанные выше ресурсы других бинарников JDK особо не являются полезными, так как их мейнтейнеры не предоставляют Early Access builds, не предоставляют бинарники новых проектов OpenJDK (таких как Project Amber, Project Loom и еще десятка других), а Oracle дает это все в рамках OpenJDK (по идентичной лицензии c OpenJDK).
Но как только возникает вопрос в решении проблем, то работа с Oracle (через покупку лицензии) выходит только в плюс, ведь Oracle является основным и самым крупным контрибьютором OpenJDK.
Слышал, что поддержка не особенно проявляет рвение и подписчикам ещё приходится доказывать наличие бага. Правда, подтвердить слухи не могу.
Я бы не назвал применение в проде бесполезным.
так как их мейнтейнеры не предоставляют Early Access builds, не предоставляют бинарники новых проектов OpenJDK
А вот EA-билды мало кому полезны. В них заинтересован узкий круг специалистов, каждый из которых может и сам собрать интересующего его версию из исходников.
Слышал, что поддержка не особенно проявляет рвение и подписчикам ещё приходится доказывать наличие бага. Правда, подтвердить слухи не могу.
Так к чему упоминание это? Это как утверждать что Лохнесское чудовище существует, но пруфов нет. Это больше теории, чем правда, ведь обязательства стоящие перед Oracle она выполняет, все согласно контракту.
Использование неофициального дистрибутива так же не дает вам никаких привилегий и бонусов, а при проблемах вам нужно будет обращаться именно к тем, кто релизил дистрибутив, потому что некоторые вендоры бинарников еще и делают бэкпорты, а некоторые еще и вставляют свои реализации JVM в сборку.
Вот это вы только что кинули камень в огород комьюнити тех, кто пишет библиотеки. EA билды нужны для того, чтобы подготовиться к релизу новой версии JDK до того момента как она выйдет.
покажите мне CI, который будет тратить время на сборку бинарников JDK c нужной версией, это крайне нелогично.
Узнайте, как установить OpenJDK и Oracle JDK версий с 8 по 11 в системах Ubuntu.
6. Сравнение
Мы видели три разных способа установки JDK в Ubuntu. Давайте кратко рассмотрим каждый из них, указав на преимущества и недостатки.
Там больше, откуда это появилось
Какую версию Java я должен использовать?
По состоянию на сентябрь 2019 года Java 13 является последней выпущенной версией Java, с новыми версиями, выходящими каждые 6 месяцев — Java 14 запланирована на март 2020 года, Java 15 на сентябрь 2020 года и т.д. В прошлом циклы выпуска Java были намного длиннее, до 3-5 лет!
С появлением такого количества новых версий в действительности имеются следующие основные сценарии использования:
- Унаследованные проекты в компаниях часто связаны с использованием Java 8 (см. Раздел «Почему компании все еще застревают на Java 8?» Ниже). Таким образом, вы также будете вынуждены использовать Java 8.
- Некоторые унаследованные проекты даже работают на Java 1.5 (выпущен в 2004 г.) или 1.6 (выпущен в 2006 г.) — сожалею, друзья!
- Если вы уверены, что используете самые последние IDE, интегрированные среды и инструменты сборки и запускаете новый проект, вы можете без колебаний использовать Java 11 (LTS) или даже самую последнюю версию Java 13.
- Есть специальная область разработки Android, где Java в основном застряла на версии Java 7, с доступом к определенному набору функций Java 8. Но вы можете переключиться на использование языка программирования Kotlin.
Заключение
Лично я особой проблемы в наличие нескольких версий JDK не вижу, так как всем им нужно проходить сертификацию (TCK). Чем действительно стоит обеспокоиться — это использование одной из проприетарных JDK и бесплатной версии сборки от Oracle, во избежание головной боли в будущем. Если вы используете только базовые функции (например, ваш бизнес не особо зависит от секьюрити-апдейтов), вам больше подойдут сборки OpenJDK от Oracle (НЕ OracleJDK), т.к. они постоянно обновляются (в течение 6 месяцев после релиза), и вы можете использовать JDK в продакшене без особых проблем. Если в вашем бизнесе задействованы облачные сервисы (или с AWS), хорошим выбором будет AWS Corretto, который уже пригоден к использованию на Amazon Linux и Docker.
Здесь есть все, что вам нужно знать о различных версиях и функциях Java.
Примечание переводчика
09 апреля 2020 г. Марко опубликовал новую версию Руководства, в которую добавлено описание Java 14.
Перевод новой версии Руководства предлагается Вашему вниманию.
7. Изучение других версий JDKs
Примеры в разделах 2 и 3 отражают текущее состояние Ubuntu 18.04 LTS. Имейте в виду, что JDKS и соответствующие пакеты регулярно обновляются. Таким образом, полезно знать, как исследовать наши текущие возможности .
В этом разделе мы сосредоточимся на изучении пакетов OpenJDK в “Главном” репозитории. Если мы уже добавили PPA с помощью add-apt-repository , мы можем изучить его аналогичным образом с помощью apt list и apt show .
Если мы хотим использовать неподдерживаемую версию, даже это может быть сложно. На момент написания этой статьи мы не нашли никаких пакетов для Java 9 или Java 10 на веб-сайтах OpenJDK и Oracle.
Давайте посмотрим, какие другие пакеты JDK существуют в “Главном” репозитории:
В Ubuntu 18.04 LTS мы можем выбирать между двумя текущими версиями LTS Java:
Также стоит отметить , что, хотя пакет называется openjdk-11-jdk , на момент написания этой статьи он фактически устанавливает версию 10.0.2. Это, вероятно, скоро изменится. Мы можем это увидеть, если осмотрим упаковку:
Давайте взглянем на раздел “Зависит” вывода. Обратите внимание, что эти пакеты (например, JRE) также устанавливаются вместе с openjdk-11-jdk :
Давайте рассмотрим, какие другие пакеты у нас есть в вашем распоряжении, кроме пакета jdk по умолчанию:
Мы можем найти некоторые из этих пакетов полезными. Например, openjdk-11-source содержит исходные файлы для классов API Java core, в то время как openjdk-11-dbg содержит символы отладки.
Помимо семейства openjdk -* , есть пакет default-jdk , который стоит изучить:
В конце вывода в описании говорится::
“Этот пакет зависимостей указывает на среду выполнения Java или Java-совместимый комплект разработки, рекомендованный для этой архитектуры…”
В случае Ubuntu 18.04 LTS это пакет openjdk-11-jdk на данный момент.
В чем разница между JRE и JDK?
До сих пор мы говорили только о Java. Но что именно означает «Java»?
Во-первых, вам нужно провести различие между JRE (Java Runtime Environment) и JDK (Java Development Kit).
Исторически, вы загружали только JRE, если вас интересовали только программы Java. JRE включает, помимо прочего, виртуальную машину Java (JVM) и инструмент командной строки «java».
Для разработки новых программ на Java вам нужно было загрузить JDK. JDK включает в себя все, что есть в JRE, а также компилятор javac и несколько других инструментов, таких как javadoc (генератор документации Java) и jdb (отладчик Java).
Теперь, почему я говорю в прошедшем времени?
Вплоть до Java 8 веб-сайт Oracle предлагал JRE и JDK в качестве отдельных загрузок, хотя JDK также всегда включал JRE в отдельной папке. В Java 9 это различие практически исчезло, и вы всегда загружаете JDK. Структура каталогов JDK также изменилась, так как в ней больше не было явной папки JRE.
Таким образом, хотя некоторые дистрибутивы (см. Раздел «Дистрибутивы Java») по-прежнему предлагают отдельную загрузку JRE, похоже, существует тенденция предлагать только JDK. Следовательно, теперь мы будем использовать Java и JDK взаимозаменяемо.
10. Заключение
Подводя итог, в этой статье мы видели примеры установки JDK из “Основного” репозитория, из PPA и вручную. Мы кратко сравнили эти три способа установки.
И, наконец, мы видели, как управлять несколькими установками Java в системе Ubuntu с помощью update-alternatives .
В качестве следующего шага может быть полезно установить переменную среды JAVA_HOME .
Изучите различия между Oracle Java Development Kit и OpenJDK.
Oracle JDK
Это главный поставщик Java 11 (релиз уже состоялся). Это коммерческая версия с платной поддержкой. Ее можно бесплатно скачивать и использовать только непосредственно для разработки. Использовать ее в продакшене, не заплатив Oracle, нельзя (так что для многих не интересующихся вопросами лицензирования это ловушка). Oracle планирует предоставлять платную поддержку до 2026 года и далее. В отличие от того, как было раньше, сборка Oracle JDK ничем не “лучше” OpenJDK (по стольку по скольку оба находятся на одном и том же уровне security patch level).
3.3. Установка Oracle JDK 8 из PPA
“Основной” репозиторий не содержит никакого проприетарного программного обеспечения. Если мы хотим установить Oracle Java с помощью apt , нам придется использовать пакет из PPA . Мы уже видели, как установить Oracle JDK 11 из linuxuprising PPA. Для Java 8 мы можем найти пакеты в webupd8team PPA.
Во-первых, нам нужно добавить репозиторий PPA apt в нашу систему:
Затем мы можем установить пакет обычным способом:
Во время установки мы должны принять лицензионное соглашение Oracle. Давайте проверим установку:
Вывод показывает Java(TM) JRE и JVM:
Мы также можем проверить, установлен ли компилятор:
Установка Java в Ubuntu
Вывод
К настоящему времени у вас должен быть довольно хорошее представление о нескольких вещах:
- Как установить Java, какую версию получить и где ее получить (подсказка: AdoptOpenJDK).
- Что такое дистрибутив Java, какие существуют и в чем различия.
- Каковы различия между конкретными версиями Java.
Обратная связь, исправления и случайный ввод всегда приветствуются! Просто оставьте комментарий внизу.
Спасибо за прочтение!
Java 12
В Java 12 появилось несколько новых функций и исправлений, но здесь стоит упомянуть только поддержку Unicode 11 и превью нового выражения switch, о котором вы узнаете в следующем разделе.
4. Установка JDK 10
Версии Java 10 и Java 9 больше не поддерживаются. Вы можете установить их вручную, выполнив те же действия, что и в разделе 2. Вы можете забрать пакеты из:
Оба сайта содержат одно и то же предупреждение:
Эти старые версии JDK предоставляются для того, чтобы помочь разработчикам отлаживать проблемы в старых системах. Они не обновляются последними исправлениями безопасности и не рекомендуются для использования в производстве.
Почему некоторые версии Java называются 1.X?
Java до версии 9 просто имела другую схему именования. Итак, Java 8 также может называться 1.8, Java 5 может называться 1.5 и т.д. Когда вы выполнили команду java -version с этими версиями, вы получили такой вывод:
Это просто означает Java 8. С переходом к основанным на времени выпускам с Java 9 также изменилась схема именования, и версии Java больше не имеют префикса 1.x. Теперь номер версии выглядит так:
3. OpenJDK
OpenJDK-это бесплатная реализация платформы Java SE с открытым исходным кодом. Первоначально он был выпущен в 2007 году в результате разработки, которую Sun Microsystems начала в 2006 году.
Конечно, мы должны подчеркнуть, что OpenJDK является официальной эталонной реализацией стандартной версии Java начиная с версии SE 7 .
Изначально он был основан только на JDK 7. Но, начиная с Java 10, за справочную реализацию платформы Java SE с открытым исходным кодом отвечает проект JDK . И, как и в случае с Oracle, проект JDK также будет выпускать новые версии функций каждые шесть месяцев.
Мы должны отметить, что до этого продолжительного проекта были проекты выпуска JDK, которые выпустили одну функцию, а затем были прекращены.
Давайте теперь проверим версии OpenJDK:
- Проект OpenJDK 6 основан на JDK 7, но изменен для обеспечения версии Java 6 с открытым исходным кодом
- Проект OpenJDK 7 – 28 Июля 2011 года
- Проект OpenJDK 7u – этот проект разрабатывает обновления для Java Development Kit 7
- Проект OpenJDK 8 – 18 марта 2014 года
- Проект OpenJDK 8u – этот проект разрабатывает обновления для Java Development Kit 8
- Проект OpenJDK 9 – 21 Сентября 2017
- Выпуск проекта JDK 10-20 марта 2018 г.
- Выпуск проекта JDK 11-25 сентября 2018 г.
- Выпуск проекта JDK 12 – Фаза стабилизации
Java 8
Java 8 была массовым выпуском, и вы можете найти список всех функций на веб-сайте Oracle. Здесь я хотел бы упомянуть два основных набора функций:
Особенности языка: лямбды и т.д.
До Java 8 всякий раз, когда вы хотели создать экземпляр, например, нового Runnable, вы должны были написать анонимный внутренний класс, например, так:
С лямбдами тот же код выглядит так:
Вы также получили ссылки на методы, повторяющиеся аннотации, методы по умолчанию для интерфейсов и некоторые другие языковые функции.
Коллекции и потоки
В Java 8 вы также получили операции в функциональном стиле для коллекций, также известные как Stream API. Быстрый пример:
До Java 8, вам нужно было написать циклы for, чтобы что-то сделать с этим списком.
С помощью API Streams вы можете сделать следующее:
AdoptOpenJDK OpenJ9
Вдобавок к стандартным сборкам OpenJDK AdoptOpenJDK будет также предоставлять версии с OpenJ9 вместо HotSpot. OpenJ9 изначально была JVM от IBM, но сейчас OpenJ9 имеет открытый исходный код. И, кстати говоря, эта опция наиболее достойная изучения.
6.1. Бесплатный и открытый исходный код
Следующие реализации, перечисленные в алфавитном порядке, являются открытыми и бесплатными для использования:
- AdoptOpenJDK
- Amazon Правильно
- Azul Zulu
- Bck2Brwsr
- CACAO
- Кодовое имя Один
- ДоппиоЙВМ
- Eclipse OpenJ9
- Graal VM CE
- ХайкуВМ
- горячая точка
- Амига
- JamVM
- Jelatine JVM
- Jikes RVM (Виртуальная машина для исследований Jikes)
- Jikes RVM (Виртуальная машина для исследований Jikes)
- леЖОС
- Максин
- Движок с несколькими ОС
- RopeVM
- спм
1. Обзор
В этом уроке мы представим различные методы установки JDK на Ubuntu . Затем мы кратко сравним методы. Наконец, мы покажем, как управлять несколькими установками Java в системе Ubuntu.
В качестве предварительного условия для каждого метода нам необходимо
- система Ubuntu
- войти в систему как пользователь, не являющийся root, с правами sudo
Инструкции, описанные ниже, были протестированы на Ubuntu 18.10, 18.04 LTS, 16.04 LTS и 14.04 LTS. Для Ubuntu 14.04 LTS есть некоторые различия, которые упоминаются в тексте.
Обратите внимание, что как пакеты, которые вы можете загрузить из OpenJDK и Oracle, так и пакеты, доступные в репозиториях, регулярно обновляются. Точные имена пакетов, вероятно, изменятся в течение нескольких месяцев, но основные методы установки останутся прежними.
3.1. Установка OpenJDK 8 на Ubuntu 16.04 LTS и новее
Но использование инструментов apt и “Основного” репозитория дает некоторые преимущества. “Основной” репозиторий доступен по умолчанию во всех системах Ubuntu. Он поддерживается Canonical — той же компанией, которая поддерживает саму Ubuntu.
Давайте установим OpenJDK 8 из “Основного” репозитория с помощью apt :
Теперь давайте проверим установку:
В результате должна быть указана среда выполнения и JVM:
Давайте проверим, что исполняемый файл javac также доступен:
Теперь мы должны увидеть тот же номер версии, что и показано выше:
1. введение
В этой статье мы рассмотрим различия между Oracle Java Development Kit и OpenJDK . Сначала мы быстро рассмотрим каждый из них, а затем проведем сравнение. После этого мы увидим список других реализаций JDK.
2.3. Установка Oracle JDK 11 из PPA
В настоящее время Oracle JDK 11 также доступен в PPA (личном архиве пакетов). Эта установка включает в себя 2 шага: добавление репозитория в нашу систему и установку пакета из репозитория через apt:
Шаги проверки должны показать тот же результат, что и после ручной установки в разделе 2.2.1.:
И для компилятора:
В Ubuntu 14.04 LTS команда add-apt-repository по умолчанию недоступна. Чтобы добавить репозиторий, сначала нам нужно установить пакет software-properties-common .
После этого мы можем продолжить работу с add-apt-repository, apt update и apt install , как показано выше.
Почему компании все еще застряли на Java 8?
Существует множество разных причин, по которым компании все еще придерживаются Java 8. Вот некоторые из них:
- Инструменты сборки (Maven, Gradle и т.д.) и некоторые библиотеки изначально имели ошибки с версиями Java версий> 8 и нуждались в обновлениях. Даже сегодня, например, с Java 9+, некоторые инструменты сборки выводят предупреждения «reflective access» при создании проектов Java, которые просто «не готовы», даже если со сборкой все в порядке.
- До Java 8 вы в основном использовали JDK-сборки Oracle, и вам не нужно было заботиться о лицензировании. Однако в 2019 году Oracle изменила схему лицензирования, что привело к тому, что Интернет сошел с ума, сказав, что «Java больше не является бесплатной», — и последовало значительное замешательство. Однако на самом деле это не проблема, о чем вы узнаете в разделе «Дистрибутивы Java» данного руководства.
- В некоторых компаниях действуют политики, позволяющие использовать только версии LTS, и полагаются на поставщиков своих ОС для предоставления этих сборок, что требует времени.
Подводя итог, у вас есть сочетание практических вопросов (обновление ваших инструментов, библиотек, фреймворков) и политических проблем.
2. Установка JDK 11
Если мы хотим использовать последнюю и самую лучшую версию JDK, часто ручная установка-это путь. Это означает загрузку пакета с сайта OpenJDK или Oracle и настройку его таким образом, чтобы он соответствовал соглашениям о том, как apt настраивает пакеты JDK.
6.2. PPA
PPA-это небольшие репозитории , поддерживаемые отдельным разработчиком или группой . Это также означает, что частота обновления зависит от сопровождающего.
Пакеты из PPAS считаются более рискованными, чем пакеты в “Основном” репозитории . Во-первых, мы должны явно добавить PPA в список репозиториев системы, указав, что мы ему доверяем. После этого мы можем управлять пакетами с помощью обычного инструмента apt ( apt update и apt upgrade ).
6.2. Собственные Реализации
Существуют также реализации, защищенные авторским правом:
- Azul Zing JVM
- CEE-J
- Эксельсиор ДЖЕТ
- Грааль ВМ ЭЭ
- Imsys AB
- JamaicaVM (aicas)
- JBlend (Приложение)
- MicroJvm (IS2T – Промышленная интеллектуальная программная технология)
- СПМ
- PTC Чрескожно
- SAP JVM
- Waratek CloudVM для Java
Наряду с активными реализациями , перечисленными выше, мы можем увидеть список неактивных реализаций и краткое описание каждой реализации.
8. Обзор: Версии и пакеты Java
Теперь давайте посмотрим, как различные версии Java могут быть установлены на Ubuntu 18.04 LTS на момент написания этой статьи:
Java 11
Java 11 также была несколько меньшей версией с точки зрения разработчика.
Строки и файлы
Строки и файлы получили несколько новых методов (не все перечислены здесь):
Запустить исходные файлы
Начиная с Java 10, вы можете запускать исходные файлы Java без предварительной компиляции. Шаг к написанию сценариев.
Вывод типа локальной переменной (var) для лямбда-параметров
В заголовке все сказано:
Другие вкусности
Flight Recorder (Регистратор полетов), сборщик мусора No-Op, Nashorn-Javascript-Engine объявлен deprecated (устаревшим) и т.д.
Java 9
Java 9 также была довольно большой версией, с несколькими дополнениями:
Коллекции
Коллекции получили несколько новых вспомогательных методов для простого создания списков, наборов и карт.
Streams
Потоки получили несколько дополнений, в виде методов takeWhile, dropWhile и iterate.
Optionals
Optionals получили метод ifPresentOrElse, которого крайне не хватало.
Интерфейсы
Интерфейсы получили private методы:
Другие возможности языка
И пара других улучшений, таких как улучшенный оператор try-with-resources или расширения diamond оператора.
JShell
Наконец, в Java появилась оболочка, в которой вы можете попробовать простые команды и получить немедленные результаты.
В Java 9 у Java появился собственный современный клиент — хотя он находится в режиме превью, что означает, что он может быть изменен в более поздних версиях Java.
Проект Jigsaw: модули Java и файлы Jar с несколькими выпусками
Java 9 получила Jigsaw Module System, которая чем-то напоминает старую добрую спецификацию OSGI. Целью данного руководства не является подробное описание Jigsaw — посмотрите предыдущие ссылки, чтобы узнать больше.
Файлы Multi-Release .jar позволили создать один файл .jar, содержащий разные классы для разных версий JVM. Таким образом, ваша программа может вести себя по-разному / иметь разные классы, используемые при запуске на Java 8 и на Java 10, например.
Java 10
В Java 10 было несколько изменений, таких как сборка мусора и т.д. Но единственное реальное изменение, которое вы, как разработчик, вероятно, заметите, — это введение ключевого слова var, также называемого выводом типа локальной переменной.
Вывод типа локальной переменной: ключевое слово var
Чувствуете себя как в Javascript-е, не так ли? Однако Java все еще строго типизирован и var применяется только к переменным внутри методов (спасибо, dpash, за то, что снова указал на это).
AdoptOpenJDK
В 2017 году группа участников, разработчиков и поставщиков Java User Group (Amazon, Microsoft, Pivotal, Red Hat и другие) создала сообщество под названием AdoptOpenJDK.
Они предоставляют бесплатные надежные сборки OpenJDK с более длительной доступностью / обновлениями и даже предлагают вам выбор из двух разных виртуальных машин Java: HotSpot и OpenJ9.
Я очень рекомендую ее, если вы хотите установить Java.
OpenJDK Build от Oracle
Существует бесплатные не-брендовые версии OpenJDK, распространяемые по лицензии GPL с Classpath Extension (подходит для коммерческого применения). Эти версии сборки доступны только в течение 6 месяцев после релиза. Для Java 11 ожидается выход версии Java 11.0.0 и два security -патча, 11.0.1 и 11.0.2. Чтобы продолжать использование версии OpenJDK и его патчей от Oracle, необходимо перейти на Java 12 не позднее, чем через месяц после запуска. Обратите внимание, что порядок обеспечения security-патчей отличается от порядка предоставления поддержки, которая включает в себя оплату обработки отчетов об ошибках.
Каковы примеры этих новых возможностей новых версий Java?
Но, как правило: старые, более длинные циклы выпуска (3-5 лет, вплоть до Java 8) означали множество новых функций в каждом выпуске.
Шестимесячный цикл выпуска означает меньшее количество функций на выпуск, поэтому вы можете быстро освоить языковые функции Java 9-13.
Благодарности
Стивен Колебурн написал фантастическую статью о различных доступных дистрибутивах Java. Спасибо, Стивен!
4. Oracle JDK против OpenJDK
В этом разделе мы сосредоточимся на ключевых различиях между Oracle JDK и OpenJDK.
4.2. Лицензии
Oracle JDK был лицензирован в соответствии с Лицензионным соглашением Oracle с двоичным кодом , в то время как OpenJDK имеет Общую публичную лицензию GNU (GNU GPL) версии 2 с исключением ссылок .
При использовании платформы Oracle существуют некоторые последствия для лицензирования. Общедоступные обновления для Oracle Java SE 8, выпущенные после января 2019 года, не будут доступны для делового, коммерческого или производственного использования без коммерческой лицензии, как объявила Oracle |. Однако OpenJDK является полностью открытым исходным кодом и может использоваться свободно.
Как мне установить Java или JDK?
На данный момент не обращайте внимания на образы Java-Docker, оболочки MSI или пакеты для конкретной платформы. В конце концов, Java — это просто файл .zip; ни больше ни меньше.
Поэтому все, что вам нужно сделать, чтобы установить Java на свой компьютер, — это разархивировать файл jdk-.zip. Вам даже не нужны права администратора для этого.
Ваш распакованный файл Java будет выглядеть так:
Магия происходит в каталоге / bin, который в Windows выглядит следующим образом:
Поэтому все, что вам нужно сделать, это разархивировать этот файл и поместить каталог /bin в переменную PATH, чтобы вы могли вызывать команду java из любого места.
В случае, если вам интересно, установщики с графическим интерфейсом, такие как Oracle или AdoptOpenJDK, выполняет распаковку и изменение переменной PATH вместо вас.
Чтобы убедиться, что вы правильно установили Java, вы можете просто выполнить команду java -version. Если вывод выглядит так, как показано ниже, вы готовы!
Теперь остался один вопрос: откуда вам взять этот .zip файл с Java? Что подводит нас к теме дистрибутивов.
3.2. Установка OpenJDK 8 на Ubuntu 14.04 LTS
В Ubuntu 14.04 LTS пакеты OpenJDK недоступны в “Главном” репозитории, поэтому мы установим их из openjdk-r PPA. Как мы видели в разделе 2.3 выше, команда add-apt-repository по умолчанию недоступна. Для этого нам нужен пакет software-properties-common :
5. Изменения, Произошедшие С Java 11
Как мы можем видеть в блоге Oracle , есть некоторые важные изменения, начиная с Java 11.
Прежде всего, Oracle изменит свою историческую лицензию “ BCL ” на комбинацию лицензии с открытым исходным кодом GNU General Public License v2, за исключением пути к классам (GPLv2+CPE) и коммерческой лицензии при использовании Oracle JDK как части продукта или услуги Oracle или когда программное обеспечение с открытым исходным кодом не приветствуется.
Каждая лицензия будет иметь разные сборки, но они будут функционально идентичны, с некоторыми отличиями в косметике и упаковке.
Кроме того, в OpenJDK теперь доступны традиционные “коммерческие функции”, такие как бортовой самописец, управление полетами Java и совместное использование данных классов приложений, а также сборщик мусора Z. Таким образом, Сборки Oracle JDK и OpenJDK по существу идентичны начиная с Java 11 и далее .
Давайте рассмотрим основные отличия:
- Набор Oracle для Java 11 выдает предупреждение при использовании параметра -XX:+UnlockCommercialFeatures , в то время как в сборках OpenJDK этот параметр приводит к ошибке
- Oracle JDK предлагает конфигурацию для предоставления данных журнала использования инструменту “Расширенная консоль управления” .
- Oracle всегда требовала, чтобы сторонние поставщики криптографии были подписаны известным сертификатом, в то время как платформа криптографии в OpenJDK имеет открытый криптографический интерфейс, что означает, что нет никаких ограничений относительно того, какие поставщики могут быть использованы
- Oracle JDK 11 по-прежнему будет включать установщиков, фирменный стиль и упаковку JAR, в то время как сборки OpenJDK в настоящее время доступны в виде zip и tar.gz файлы
- Команда javac –release ведет себя по-разному для целевых объектов Java 9 и Java 10 из-за наличия некоторых дополнительных модулей в выпуске Oracle
- Выходные данные команд java –версия и java-полная версия будут отличать сборки Oracle от сборок OpenJDK
Azul Zulu, Amazon Corretto, SAPMachine
Но не забудьте проверить на сайтах дистрибьюторов, чтобы узнать о преимуществах каждого отдельного дистрибутива.
7. Заключение
В этой статье мы сосредоточились на двух самых популярных на сегодняшний день наборах для разработки Java.
Сначала мы описали каждый из них, а затем подчеркнули наиболее заметные различия между ними. Затем мы обратили особое внимание на изменения и различия, произошедшие с Java 11. Наконец, мы перечислили другие активные реализации, доступные сегодня.
От переводчика: Решение перевести эту статью пришло не само собой — скорее это вынужденная мера :). К нам, как к вендорам фреймворка CUBA, обращаются с этим вопросом с завидной регулярностью. Безусловно, для нас это тоже крайне важная тема, и в ответ на последние изменения мы подняли тестовые стенды как на Oracle JDK, так и на Liberica JDK — эта мера на данный момент ограждает наших пользователей от непредвиденных лицензионных трат. Однако, эта тема еще не закрыта, и мы продолжаем внимательно следить за развитием событий, и, кто знает, возможно нам придется добавлять стенды для еще каких сборок JDK уже в следующем году.
Статья под катом подкупает тем, что она лаконично описывает проблематику и наиболее популярные JDK с их особенностями.
Недавно Oracle заявили, что эволюция Java кардинально изменится благодаря переходу на "Release Train" — новому подходу к выкатыванию версий. Это изменение также повлекло за собой перемены в плане поддержки версий, которая теперь будет осуществляться не для всех, а только для LTS версий. Сообщество Java чемпионов разъяснило вводимые новшества, детальный документ доступен в сети.
Даже с учетом этих новостей остаются вопросы: какие билды JDK сейчас доступны? Будут ли они бесплатными или коммерческими? Прежде чем ответить на этот вопрос, важно понять, какие требования предъявляются к JDK как продукту. Фактически, есть только один основной исходный код JDK. Он находится здесь. Кто угодно может использовать исходный код для построения собственной сборки и размещения ее где-то в сети. Однако есть отдельная процедура сертификации, которая должна быть пройдена, чтобы сборка JDK считалась валидной. Сертификация осуществляется Java Community Process (JCP), который предоставляет Technology Compatibility Kit (TCK). Если какая-либо организация создает новую сборку OpenJDK, которая отвечает TCK, она считается "совместимой с Java SE".
Имейте в виду, что сборка не может называться "Java SE", если компания, осуществившая сборку, не приобрела коммерческую лицензию от Oracle. Например, сборки AdoptOpenJDK, которые проходят TCK, не являются "Java SE", но являются "Java SE compliant". Также нужно учитывать, что сертификация сейчас основывается “на честном слове” — результаты не отсылаются в JCP/Oracle для верификации и являются закрытой информацией. Короче говоря, каждый вендор, взявший исходники OpenJDK и собравший версию, порождает еще одну отдельную сборку JDK.
Итак, без лишних слов, рекомендуем ознакомиться со следующими готовыми к использованию JDK:
AdoptOpenJDK
Это тоже бесплатные и не-брендовые сборки OpenJDK, распространяемые по лицензии GPL с Classpath Extension, только в отличие от билдов OpenJDK от Oracle эти версии сборки будут действовать в течение более длительного времени для основных версий, таких как Java 11. Версии Java 11 будут выпускаться в течение 4 лет через год после следующего основного релиза. AdoptOpenJDK ориентируется на сообщество. Пока другие команды создают и публикуют исправления безопасности для исходного репозитория OpenJDK, они будут выпускать билды. И IBM, и Red Hat обозначили, что намерены выпускать такие патчи.
Java 14 и позже
Будет рассмотрено здесь, как только их выпустят. Зайдите в ближайшее время!
Дистрибутивы Java
Существует множество сайтов, предлагающих загрузку Java (читай: JDK), и неясно, «кто что предлагает и с каким лицензированием». Этот раздел проливает свет на это.
Amazon Corretto
Это новейшая из всех описанных опций. Corretto — бесплатная версия сборки OpenJDK с долгосрочной поддержкой, проходящая TCK. Она распространяется по стандартным условиям лицензирования всех версий OpenJDK: GPL + CE. Amazon создаст собственные патчи и запустят Corretto на AWS, так что он будет использоваться довольно активно (и уже добавлен в некоторые продукты). Поддержка Java 8 планируется по меньшей мере до июня 2023.
В процессе преобразования исходного OpenJDK в различные версии сборки производитель может добавлять различные утилиты или брендировать продукт, если это не препятствует сертификации (TCK). Например, нельзя добавить новый public-метод в API или новые языковые ресурсы.
Есть и другие реализации JDK, такие как IBM и SAPMachine. Однако эти версии сборки не так часто используются, поэтому они не упомянуты в этой статье. Более подробную информацию можно найти здесь и здесь.
Исходная информация
Во-первых, давайте взглянем на некоторые общие практические вопросы, которые возникают у людей при попытке выбрать правильную версию Java для своего проекта.
Если вы хотите узнать больше о конкретной версии, перейдите на сайт AdoptOpenJDK, выберите последнюю версию Java, загрузите и установите ее. Затем вернитесь к этому руководству и узнайте еще кое-что о разных версиях Java.
4.2. Установка Oracle JDK 10 Вручную
OpenJDK (от Oracle) и сборки OracleJDK
Один из поставщиков, который создает Java из исходного кода, — это Oracle. Это приводит к двум разным дистрибутивам Java, что поначалу может быть очень запутанными.
-
от Oracle (!). Эти сборки бесплатны и не имеют торговой марки, но Oracle не выпустит обновления для более старых версий, скажем, Java 13, как только выйдет Java 14. — это коммерческая сборка под брендом, выпускаемая начиная с изменения лицензии в 2019 году. Это означает, что ее можно использовать бесплатно во время разработки, но вы должны платить Oracle, если используете ее в рабочей среде. При этом вы получаете более длительную поддержку, то есть все обновления дистрибутива и номер телефона, по которому можно позвонить, если с вашей JVM будут проблемы.
Исторически (до Java 8) существовали реальные исходные различия между сборками OpenJDK и сборками OracleJDK, при этом можно было сказать, что OracleJDK был «лучше». Но на сегодняшний день обе версии практически одинаковы, с небольшими отличиями.
Впрочем все сводится к тому, что вам требуется платная коммерческая поддержка (номер телефона) для используемой версии Java.
6. Другие реализации JDK
Давайте теперь быстро взглянем на другие активные реализации Java Development Kit.
Java 13
Вы можете найти полный список возможностей здесь, но, по сути, вы получаете поддержку Unicode 12.1, а также две новые или улучшенные превью функции (могут быть изменены в будущем):
Switch выражение (Preview — предварительная версия)
Выражения переключателя теперь могут возвращать значение. И вы можете использовать лямбда-стиль синтаксиса для своих выражений, без проблем с ошибками:
Старые операторы switch выглядели так:
В то время как в Java 13 операторы switch могут выглядеть так:
Многострочные строки (превью)
Наконец-то вы можете сделать это на Java:
Дальнейшее чтение:
6.1. “Основной” репозиторий
Это “родной” способ установки Ubuntu . Большим преимуществом является то, что мы обновляем пакеты с помощью “обычного apt рабочего процесса” с помощью apt update и apt upgrade .
Кроме того, “Основной” репозиторий поддерживается Canonical, который обеспечивает достаточно быстрые (если не немедленные) обновления . Например, версии OpenJDK 10.0.1 и 10.0.2 были синхронизированы в течение месяца после выпуска.
В чем разница между версиями Java?
Должен ли я изучать конкретную?
Придя из других языков программирования с большими перерывами между выпусками, как, например, Python 2–3, вы можете спросить, применимо ли это к Java.
Очевидно, что это не работает наоборот, скажем, ваша программа использует функции Java 13, которые просто недоступны в Java 8 JVM.
Это означает несколько вещей:
- Вы не просто «изучаете» конкретную версию Java, например Java 12.
- Скорее, вам нужно получить хорошую основу для всех языковых возможностей вплоть до Java 8.
- И затем, из этого руководства вы можете узнать, какие дополнительные функции появились в Java 9-13, чтобы использовать их всегда, когда это возможно.
Red Hat OpenJDK
Red Hat предоставляет версии сборки OpenJDK на Red Hat Enterprise Linux (RHEL), являющемся коммерческим продуктом с платной поддержкой. Red Hat очень неплохо справляются с исправлениями безопасности в OpenJDK. В прошлом Red Hat отвечали за security-апдейты Java 6 и 7. Сборка от Red Hat более интегрирована с операционной системой, так что ее нельзя назвать типичным билдом OpenJDK (отсутствует JDK конечного пользователя).
6.3. Ручная Установка
Мы загружаем пакет непосредственно с сайта OpenJDK или Oracle. Хотя этот метод обеспечивает большую гибкость, мы несем ответственность за обновления. Если мы хотим иметь новейший и самый большой JDK, это правильный путь.
5. Установка JDK 9
4.3. Производительность
Между ними нет реальной технической разницы, поскольку процесс сборки Oracle JDK основан на процессе OpenJDK .
Когда дело доходит до производительности, Oracle намного лучше с точки зрения быстродействия и производительности JVM . Она уделяет больше внимания стабильности из-за важности, которую она придает своим корпоративным клиентам.
OpenJDK, напротив, будет чаще выпускать релизы. В результате мы можем столкнуться с проблемами нестабильности. Основываясь на отзывах сообщества , мы знаем, что некоторые пользователи OpenJDK сталкивались с проблемами производительности.
2.1. Установка OpenJDK 11 Вручную
Прежде всего, давайте загрузим tar архив недавно выпущенного OpenJDK 11:
И мы сравниваем sha256 сумму загруженного пакета с тем, который предоставлен на сайте OpenJDK :
Давайте распакуем архив tar :
Далее, давайте переместим каталог jdk11 , который мы только что извлекли, в подкаталог /usr/lib/jvm . Пакеты apt , описанные в следующем разделе, также помещают свои JDK в этот каталог:
Теперь мы хотим сделать команды java и javac доступными . Одной из возможностей было бы создать для них символические ссылки, например, в каталоге /usr/bin . Но вместо этого мы установим альтернативу для них обоих. Таким образом, если мы когда-нибудь захотим установить дополнительные версии JDK, они будут хорошо работать вместе:
Давайте проверим установку:
Как мы видим из выходных данных, мы действительно установили последнюю версию OpenJDK JRE и JVM:
Давайте также взглянем на версию компилятора:
Azul Zulu
Zulu — брендированная версия OpenJDK с платной коммерческой поддержкой. К тому же, хотя Azul предоставляет некоторые элементы Zulu бесплатно в рамках "Zulu Community", они не несут никаких особых обязательств по доступности этих сборок. У Azul довольно масштабный план по поддержке Zulu, включающий поддержку Java 9, 13 и 15, в отличие от других поставщиков.
Рекомендация
Как уже упоминалось в самом начале этого руководства: в сущности все (если вы не будьте слишком требовательны) функции языка Java 8 работают в Java 13. То же самое касается всех других версий Java между ними.
В свою очередь, это означает, что знание всех языковых функций Java 8 дает хорошую базу в изучении Java, а все остальные версии (Java 9-13) в значительной степени дают дополнительные функции поверх этого базового уровня.
Вот краткий обзор того, что конкретные версии могут предложить:
5.1. Установка OpenJDK 9 Вручную
Точно так же, как мы видели выше с OpenJDK 10.0.1, мы загружаем пакет OpenJDK 9 через wget и настраиваем его в соответствии с соглашениями:
9. Несколько версий Java в системе Ubuntu
Стандартный способ управления несколькими версиями одного и того же программного обеспечения в Ubuntu-через систему альтернатив Debian. Большую часть времени мы создаем, поддерживаем и отображаем альтернативы с помощью программы update-alternatives .
Когда apt устанавливает пакет JDK, он автоматически добавляет записи для альтернатив. В случае ручной установки мы видели, как добавить альтернативы для java и javac соответственно.
Давайте посмотрим на наши альтернативы:
В нашей тестовой системе, где мы установили две разные версии OpenJDK, в выходных данных перечислены обе альтернативы с соответствующими приоритетами:
Теперь, когда мы увидели наши альтернативы, мы также можем переключаться между ними:
Кроме того, мы получаем интерактивный вывод, где мы можем переключаться между альтернативами с помощью клавиатуры:
Если мы работаем над несколькими приложениями, написанными на разных версиях Java, скорее всего, нам также понадобятся разные версии другого программного обеспечения (например, Maven, какой-то сервер приложений). В этом случае мы можем рассмотреть возможность использования больших абстракций, таких как контейнеры Docker.
5.2. Установка Oracle JDK 9 Вручную
2. История Oracle JDK и Java SE
JDK (Java Development Kit) – это среда разработки программного обеспечения, используемая в программировании на платформе Java. Он содержит полную среду выполнения Java, так называемую частную среду выполнения. Название произошло из-за того, что он содержит больше инструментов, чем автономный JRE, а также другие компоненты, необходимые для разработки приложений Java.
Oracle настоятельно рекомендует использовать термин JDK для обозначения комплекта разработки Java SE (Standard Edition) (существуют также платформы Enterprise Edition и Micro Edition).
Давайте взглянем на историю Java SE:
- Бета – версия JDK-1995
- JDK 1.0 – январь 1996
- JDK 1.1 – февраль 1997
- J2SE 1.2 – декабрь 1998 года
- J2SE 1.3 – май 2000 года
- J2SE 1.4 – февраль 2002
- J2SE 5.0 – сентябрь 2004
- Java SE 6 – декабрь 2006
- Java SE 7 – Июль 2011
- Java SE 8 (LTS) – Март 2014
- Java SE 9 – Сентябрь 2017
- Java SE 10 (18.3) – Март 2018
- Java SE 11 (18,9 LTS) – Сентябрь 2018
- Java SE 12 (19.3) – Март 2019
Примечание: версии, выделенные курсивом, больше не поддерживаются.
Мы видим, что основные выпуски Java SE выходили примерно каждые два года до Java SE 7. Потребовалось пять лет, чтобы перейти с Java SE 6, и еще три, чтобы достичь Java SE 8 позже.
Начиная с Java SE 10, мы можем ожидать новых релизов каждые шесть месяцев. Однако не все выпуски будут выпусками с долгосрочной поддержкой (LTS). В соответствии с планом выпуска Oracle выпуск продукта LTS будет происходить только каждые три года.
Java SE 11 является последней версией LTS, а Java SE 8 будет получать бесплатные общедоступные обновления до декабря 2020 года для некоммерческого использования.
Этот набор для разработки получил свое нынешнее название после того, как Oracle купила Sun Microsystems в 2010 году. До этого его называли SUN JDK, и это была официальная реализация языка программирования Java.
4.1. Установка OpenJDK 10 Вручную
Давайте посмотрим, как установить OpenJDK 10.0.1:
Проект OpenJDK
С точки зрения исходного кода Java (читай: исходный код вашего JRE / JDK) есть только один — на сайте проекта OpenJDK.
Однако это всего лишь исходный код, а не распространяемая сборка (подумайте: ваш файл .zip с скомпилированной командой java для вашей конкретной операционной системы). Теоретически вы и я могли бы создать сборку из этого исходного кода, назвать ее, скажем, MarcoJDK, и начать ее дистрибуцию. Но наш дистрибутив не будет сертифицирован, чтобы можно было называть этот дистрибутив совместимым с Java SE.
Вот почему на практике есть несколько поставщиков, которые фактически создают эти сборки, сертифицируют (см. TCK) и затем распространяют их.
И хотя поставщики не могут, скажем, удалить метод из класса String перед созданием новой сборки Java, они могут добавить брэндинг (вay!) или добавить некоторые другие утилиты (например, CLI), которые они считают полезными. Но в остальном исходный код одинаков для всех дистрибутивов Java.
4.1. График выпуска
Как мы уже упоминали, Oracle будет выпускать релизы каждые три года, в то время как OpenJDK будет выпускаться каждые шесть месяцев .
Oracle обеспечивает долгосрочную поддержку своих выпусков. С другой стороны, OpenJDK поддерживает изменения в выпуске только до тех пор, пока не будет выпущена следующая версия.
Разница между JVM, JRE и JDK
2.2. Установка Oracle JDK 11 Вручную
Если мы хотим убедиться, что используем новейшую версию Oracle JDK, мы можем следовать аналогичному ручному процессу установки, как и для OpenJDK. Чтобы загрузить архив tar для JDK 11 с веб-сайта Oracle , мы должны сначала принять лицензионное соглашение . По этой причине загрузка через wget немного сложнее, чем для OpenJDK:
В приведенном выше примере загружается пакет для 11.0.1. Точная ссылка для загрузки изменяется для каждой второстепенной версии.
Следующие шаги такие же, как и для OpenJDK:
Проверка тоже такая же. Но вывод показывает, что на этот раз мы установили не OpenJDK, а Java(TM):
И для компилятора:
3. Установка JDK 8
4.5. Развитие и популярность
Oracle JDK полностью разработан корпорацией Oracle , в то время как OpenJDK разработан Oracle, OpenJDK и сообществом Java . Однако в его разработке также принимают активное участие такие первоклассные компании, как Red Hat, Azul Systems, IBM, Apple Inc., SAP AG.
Как мы видим по ссылке из предыдущего подраздела, когда речь заходит о популярности у ведущих компаний, которые используют наборы для разработки Java в своих инструментах, таких как Android Studio или IntelliJ IDEA, раньше более предпочтительным был Oracle JDK, но оба они перешли на JetBrains на основе OpenJDK сборки .
С другой стороны, основные дистрибутивы Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) предоставляют OpenJDK в качестве реализации Java SE по умолчанию.
4.4. Особенности
Если мы сравним функции и опции, мы увидим, что в продукте Oracle есть регистратор полетов, управление полетами Java и функции совместного использования данных класса приложений , в то время как OpenJDK имеет функцию отображения шрифтов .
Кроме того, Oracle имеет больше возможностей для сбора мусора и лучшие средства визуализации.
Читайте также: