Установка и
настройка Java (ч. 2)

Введение

В предыдущей части мы написали простую программу с помощью онлайн-редактора кода. Если хотите, можете им пользоваться какое-то время. Но рано или поздно придется идти дальше в познании Java и сопутствующих технологий. А для этого уже нужны совсем другие инструменты. О некоторых из них мы и поговорим в этой статье.
Для того чтобы начать писать приложения на Java у себя на компьютере, требуется выполнить подготовительную работу, связанную с установкой и настройкой необходимых программ.

1. Написано однажды, работает везде

Java — это не просто язык. Это целая платформа, экосистема, состоящая из набора инструментов для разработчиков и разных подсистем. При этом Java является кроссплатформенным языком.
Под платформой обычно понимают сочетание аппаратной (процессор) и программной (операционная система, ОС) части.
В предыдущей статье наша маленькая программка выводила фразу: «Write once, run anywhere». Это девиз Java, подчеркивающий ее платформонезависимость.
Раньше приложения писали под конкретную ОС. Это означало, что перенести их с одной ОС на другую было крайне проблематично. Приходилось под каждую из них создавать чуть ли не с нуля новую версию программы. Зачастую под каждую платформу нанимали новую команду разработчиков. Это трудозатратно и выходит намного дороже по стоимости.
В какой-то момент возникла идея сделать универсальную платформу, на которой могли бы работать приложения, написанные под разные ОС.
Для реализации этой задумки была создана виртуальная машина (Java Virtual Machine, JVM). Это специальное приложение, которое позволяет запускать программы, написанные на Java, на любой ОС и любом железе (при условии, что JVM реализована для используемой платформы).
Виртуальная машина является прослойкой между процессором и программным кодом. При этом она запускает не файлы с исходным кодом (с расширением .java), а специальные промежуточные файлы с расширением .class в которых хранится байт-код. Этот код назван так из-за того, что представляет собой набор команд в один байт, хотя имеются команды и большей длины.
В использовании байт-кода и заключается магия переносимости программ с одной ОС на другую без внесения каких-либо изменений.
Чтобы из исходного файла получить файл, понятный JVM, его нужно скомпилировать.
Компиляция — это процесс преобразования кода, написанного на языке программирования, например, Java в специальный код, который компьютер (в нашем случае JVM) может понять и запустить. Для компиляции используется программа под названием компилятор.
Все виртуальные машины, неважно на какой ОС они установлены, знают и понимают байт-код одинаково хорошо, т. к. он представляет собой не машинные команды конкретной компьютерной платформы (конкретного процессора в виде последовательности нулей и единиц), а команды JVM. За счет этого и реализуется кроссплатформенность. Промежуточный код не зависит от какой-то ОС или процессора, т. к. не содержит код, созданный специально под них. Он содержит байт-код, который одинаково интерпретируется JVM на любой платформе.
Схема компиляции и запуска программы

2. Java Development Kit

Для создания программ на Java существует специальный набор инструментов для разработчиков, называемый Java Development Kit (JDK). Из этого набора нам сегодня потребуются две утилиты (самые основные и важные) под названием javac (сокр. от java compiler) и java (да, называется так же, как и язык).
Первая из них является компилятором. Она компилирует java-файлы в .class-файлы, содержащие байт-код. Вторая утилита нужна для запуска JVM и выполнения в ней .class-файлов.
Стоит отметить, что JVM является частью JDK.

3. Скачивание JDK

Скачивать JDK (а в дальнейшем и обновлять) можно двумя способами:
1
Заходить непосредственно на официальный сайт и брать оттуда
2
Использовать специальные программы, которые позволяют упростить этот процесс, а также следят за выходом новых версий
Но прежде, чем рассмотреть оба этих варианта, следует сказать о том, что Java как платформа имеет несколько ответвлений (подсистем), которые называются Java SE, Java EE и Java ME. Последние два — это очень специфические инструменты, которые нам не потребуются.
Нас с вами интересует Java SE (Java Standard Edition, стандартная Java или Java Core). Это та часть Java, которую необходимо хорошо знать каждому программисту. Это основа языка. Именно по ним любят гонять соискателей на собеседованиях. Ее мы и будем изучать.
Для получения JDK перейдите на сайт компании Oracle и скачайте последнюю версию Java под необходимую вам ОС.
Вы можете использовать любые альтернативные дистрибутивы JDK. Например, я вместо Oracle использую JDK под названием Axiom (Liberica) от компании BellSoft.
Для второго способа получения JDK нужно установить программу JDKMon. Она позволяет выбрать и скачивать JDK-дистрибутив от разных производителей, а также сообщает о выходе новых версий и обновлений. При ее установке винда может ругаться, но не обращайте на это внимание — смело инсталлируйте.
Интерфейс программы выглядит следующим образом:
Интерфейс JDKMon
Окно слева позволяет выбирать необходимые параметры для JDK: версию, производителя, ОС и т. д. А окно справа показывает установленную версию и, если появится обновление, то и его.
Вы можете использовать любой из двух вариантов.

4. Установка JDK

В установке JDK нет ничего сложного. Она ничем не отличается от установки других программ. Я думаю, что вы справитесь с этим процессом самостоятельно.
Единственный нюанс, о котором стоит упомянуть — это место, куда следует установить JDK. В Program Files необходимо создать папку Java и именно в нее установить JDK. У меня после установки она выглядит так:
Место установки JDK
Установка в папку Java позволяет иметь в одном месте разные версии JDK. Например, программист на работе использует Java 8, дома играется с новыми фичами Java 22, а также может кому-то помогать писать программу, используя Java 11. Все эти версии будут размещены в одном понятном месте — в папке Java.

5. Скачивание терминала

JDK установлен. Осталось убедиться в правильности работы утилит javac и java. Для этого нужен терминал (еще его называют консолью или командной строкой — я буду использовать все эти термины).
Терминал — это программа, позволяющая пользоваться ОС не в графическом режиме, как мы привыкли, а в текстовом. По принципу «вводим команду — получаем результат».
Такие терминалы часто используются в фильмах хакерами. Работа в них со стороны выглядит очень эффектно.
Терминал из далекого прошлого
В реальности программисты часто прибегают к их возможностям. Нам, как будущим разработчикам, необходимо начать приобщаться к применению этого инструмента, т. к. он будет использоваться повсеместно. Навык работы в терминале всегда востребован.
Вы можете использовать любой терминал: в Windows — это PowerShell, Cmder, Windows Terminal и т. д.; в Linux и MacOS — свои терминалы. Я остановлюсь на Cmder.
На официальном сайте предлагаются две версии: минимальная и полная. Нам достаточно минимальной.
Cmder не требует установки — распакуйте архив с программой в удобное для вас место.

6. Тестирование правильности установки JDK

Запустим cmder.exe и напишем команду: javac -version.
Отображаем версию компилятора
Разберем каждую строку:
  • G:\Tools\cmder_mini — папка, в которой у меня открылся Cmder (в ней он и установлен)
  • > — строка приглашения к вводу команд (по умолчанию λ, но я изменил)
  • javac — Java-компилятор
  • -version — параметр, позволяющий вывести версию компилятора (у меня отобразилась версия javac 21)
Если у вас после ввода данной команды не возникло никакой ошибки, и отобразилась версия, то все замечательно! Но если вывелся текст ошибки:
"javac" не является внутренней или внешней командой, исполняемой программой или пакетным файлом,
то это означает, что терминал ничего не знает про введенную вами команду.
Это можно исправить двумя способами:
1
Использовать каждый раз полный путь до исполняемого файла javac
2
поместить один раз путь до javac в специальную переменную ОС под названием PATH
Попробуем оба варианта.
Определить путь до файла можно тоже двумя способами:
1
пойти на диск, где установлен компилятор, и сделать поиск по ключевому слову javac (на случай, если не помните, куда он установлен)
2
воспользоваться консольной командой where
Искать я буду в папке Program Files, т. к. помню, что JDK была установлена именно в нее: where /R "C:\Program Files" javac
Если путь до файла содержит пробелы, то его нужно с двух сторон обрамить кавычками.
Команда where ищет по указанному пути "C:\Program Files" (заходя по очереди во все подпапки, благодаря ключу /R — рекурсивный поиск) все файлы с именем javac.
Скопируем полученный путь до javac из консоли и попробуем теперь посмотреть версию компилятора:
«C:\Program Files\Java\LibericaJDK-21-Lite\bin\javac.exe» -version
Ваш путь до javac может отличаться от моего.
На этот раз версия javac отобразилась корректно. Но согласитесь, все время помнить или искать путь до файла — это не самый удобный способ.
Попробуем второй вариант.

7. Создание PATH

В Windows (и других ОС) есть такое понятие, как переменная окружения. Это системная переменная, называемая PATH. Она хранит пути до разных системных папок с исполняемыми файлами (они же команды). Ее используют для удобства, чтобы не вводить в консоли каждый раз полный путь до какой-либо команды: достаточно ввести ее название, а путь будет браться автоматически из PATH.
Если занести в нее путь до javac, то нам больше не придется вводить его вручную.
Наверное, вы заметили, что когда я писал команду where, то она отработала без ввода полного пути. Это связано с тем, что она уже находится по умолчанию в PATH. А то, что where тоже является файлом запуска, можно убедиться, поручив ей найти саму себя.

> where where
C:\Windows\System32\where.exe
Вернемся к PATH и посмотрим, что она хранит. Сделаем это двумя способами.
Найдем в пуске Переменные среды.
Откроем их.
Кликнем дважды на строку с Path.
Появится окно со списком путей до разных системных папок.
Перед внесением изменений воспользуемся командной строкой для отображения этого же списка, но только уже в терминале.
Введите одну из следующих команд:
  • echo %PATH% (для Windows)
  • $PATH (для Linux и macOS)
Список отобразился, но разобраться в нем достаточно сложно. Можно попытаться вывести список путей, как это сделано в окне выше — каждый путь на новой строке. Для этого введем следующие команды: echo %PATH% | tr ';' '\n'.
Разберем введенные команды:
  • echo %PATH% — выводит содержимое переменной PATH
  • | называется сепаратором. Эта команда передает полученный результат от предыдущей команды (echo) к последующей (tr)
  • tr — заменяет каждую точку с запятой (а именно ей разделяются пути) переносом на новую строку (обозначается командой \n)
Осталось занести путь до javac в переменную PATH (как это сделать для macOS и Linux).

8. Создание JAVA_HOME

Перед изменением PATH необходимо в начале создать собственную переменную окружения, которая будет хранить путь до папки с установленным JDK. Обычно ее называют JAVA_HOME (она у вас может быть уже создана при установке JDK).
Mr. X
Почему бы сразу не занести путь в PATH?
Max
Дело в том, что в будущем, когда вы будете изучать такие инструменты как Apache Tomcat, Gradle, Maven и т. д., они будут искать путь до JDK именно в переменной JAVA_HOME. Чтобы в последствии не возвращаться к этому вопросу, как говорится — один раз сделал и забыл!
Получается, что JAVA_HOME нужна не самой Java, а этим сторонним приложениями. Но нам для работы нужно JAVA_HOME все же записать в PATH, т. к. терминал напрямую с JAVA_HOME не работает. Ему нужна именно Path, чтобы знать, в какой папке установлена Java.
Создадим JAVA_HOME в качестве системной переменной.
При редактировании Path соблюдайте осторожность — эта переменная содержит важную информацию! Ничего не удаляйте из нее без ясного понимания, для чего вы это делаете.
А теперь занесем ее в Path, добавив \bin. При этом, если в Path имеются и другие записи, указывающие на путь до папки с Java, кроме JAVA_HOME, то их следует удалить.
Не забудьте добавить \bin к %JAVA_HOME%, иначе терминал не найдет необходимые инструменты (javac, java и т. д.), которые находятся в этой папке. Перезапустите терминал.
Снова пробуем запустить javac -version, а заодно и java -version.
После всех выполненных настроек, утилиты java и javac успешно заработали: терминал их видит и позволяет использовать без указания полного пути до их размещения.

Заключение

Из данной статьи вы узнали про:
  • разные способы получения JDK
  • установку JDK и Cmder
  • байт-код
  • системные переменные PATH и JAVA_HOME
Ниже в таблице перечислены ключевые моменты статьи.
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!