Установка и
настройка 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, которую необходимо хорошо знать каждому программисту. Это основа языка. Именно по Java Core любят гонять соискателей на собеседованиях. Ее мы и будем изучать.
Для получения JDK перейдите на сайт компании Oracle и скачайте установочный файл для подходящей ОС.
Вы можете использовать любые альтернативные дистрибутивы JDK. Например, я вместо Oracle использую JDK под названием Liberica (Axiom) от компании BellSoft.
Для второго способа получения JDK нужно установить программу JDKMon. Она позволяет выбрать и скачивать JDK-дистрибутив от разных производителей, а также сообщает о выходе новых версий и обновлений.
Интерфейс программы выглядит следующим образом:
Интерфейс JDKMon
Окно слева позволяет выбирать необходимые параметры для JDK: версию, производителя, ОС и т. д. А окно справа показывает установленную версию и, если появится обновление, то и его.
Вы можете использовать любой из двух вариантов.
4. Установка JDK
В установке JDK нет ничего сложного. Она ничем не отличается от установки других программ. Я думаю, что вы справитесь с этим процессом самостоятельно.
Единственный нюанс, о котором стоит упомянуть — это место, куда следует установить JDK. В Program Files необходимо создать папку java и именно в нее установить JDK. У меня после установки она выглядит так:
Место установки JDK
Установка в папку java позволяет иметь в одном месте разные версии JDK. Например, программист на работе использует Java 8, дома играется с новыми фичами Java 18, а также может кому-то помогать писать программу, используя Java 11. Все эти версии будут размещены в одном понятном месте — в папке java.
5. Скачивание терминала
JDK установлен. Осталось убедиться в правильности работы утилит javac и java. Для этого нужен терминал (еще его называют консолью или командной строкой — я буду использовать все эти термины). Более подробно его мы будем рассматривать в последующих статьях.
Терминал — это программа, позволяющая пользоваться ОС не в графическом режиме, как мы привыкли, а в текстовом. По принципу «вводим команду — получаем результат».
Терминал из далекого прошлого
Такие терминалы часто используются в фильмах хакерами. Работа в них со стороны выглядит очень эффектно.
В реальности программисты часто прибегают к их возможностям. Нам, как будущим разработчикам, необходимо начать приобщаться к применению этого инструмента, т. к. он будет использоваться повсеместно. Навык работы в терминале всегда востребован.
Вы можете использовать любой терминал: в Windows — это cmd, PowerShell, cmder, windows terminal и т. д.; в Linux и MacOS — свои терминалы. Я остановлюсь на cmder.
На официальном сайте предлагаются две версии: минимальная и полная. В полную входит Git. Но его мы установим отдельно, когда будем изучать систему контроля версий. Поэтому достаточно Mini-версии.
Cmder не требует установки — распакуйте архив с программой в удобное для вас место.
Запустим cmder.exe и напишем нашу первую команду: javac -version.
Отображаем версию компилятора
Разберем каждую строку:
  • G:\Tools\cmder_mini — папка, в которой у меня открылся cmder
  • > — строка приглашения к вводу команд (по умолчанию λ, но я изменил)
  • javac — Java-компилятор
  • -version — параметр, позволяющий вывести версию компилятора (у меня отобразилась версия javac 17.0.1)
Если у вас после ввода данной команды не возникло никакой ошибки, и отобразилась версия, то все замечательно! Но если вывелся текст ошибки:
⛔ "javac" не является внутренней или внешней командой, исполняемой программой или пакетным файлом,
то это означает, что терминал ничего не знает про введенную вами команду.
Это можно исправить двумя способами:
  • использовать каждый раз в консоли полный путь до исполняемого файла javac (в Windows — это javac.exe)
  • поместить один раз путь до javac в специальную переменную ОС под названием PATH
Попробуем оба варианта.
6. Переменная окружения PATH
Определить путь до файла можно несколькими способами:
  • пойти на диск, где установлен компилятор, и сделать поиск по ключевому слову javac (на случай, если не помните, куда он установлен)
  • воспользоваться командой where /R "C:\Program Files\java" javac
Искать я буду в папке Program Files\java, т. к. помню, что JDK была установлена именно в нее.
Если путь до файла содержит пробелы, то его нужно с двух сторон обрамить кавычками.
Команда where ищет по указанному пути "C:\Program Files\java" (заходя по очереди во все подпапки, благодаря ключу /R — рекурсивный поиск) файл с именем javac.
Скопируем полученный путь до javac прямо из консоли и попробуем заново ввести команду: "C:\Program Files\java\LibericaJDK-17-Full\bin\javac.exe" -version.
Ваш путь до javac может отличаться от моего.
На этот раз версия javac отобразилась корректно. Но согласитесь, все время помнить или искать путь до файла — это не самый удобный способ.
Попробуем второй вариант.
В Windows (и других ОС) есть такое понятие, как «переменная окружения». Это системная переменная, называемая PATH. Она хранит пути до разных системных папок с исполняемыми файлами (они же команды). Ее используют для удобства, чтобы не вводить в консоли каждый раз полный путь до какой-либо команды: достаточно ввести ее название, а путь будет браться автоматически из PATH.
Если занести в нее путь до javac, то нам больше не придется вводить его вручную.
Наверное, вы заметили, что когда я писал команду where, то она отработала без ввода полного пути. Это связано с тем, что она уже находится по умолчанию в PATH. А то, что where тоже является файлом запуска, можно убедиться, поручив ей найти саму себя.

> where where
C:\Windows\System32\where.exe
Вернемся к PATH и посмотрим, что она хранит. Сделаем это двумя способами.
Найдем в пуске Переменные среды.
Откроем их.
Кликнем дважды на строку с Path.
Появится окно со списком путей до разных системных папок.
Перед внесением изменений воспользуемся командной строкой для отображения этого же списка, но только уже в терминале.
Введите одну из следующих команд:
  • echo %PATH% (для Windows)
  • $PATH (для Linux)
Список отобразился, но разобраться в нем достаточно сложно. Можно попытаться вывести список путей, как это сделано в окне выше — каждый путь на новой строке. Для этого введем следующие команды: echo %PATH% | tr ';' '\n'.
Разберем введенные команды:
  • echo %PATH% — выводит содержимое переменной PATH
  • | называется сепаратором. Эта команда передает полученный результат от предыдущей команды (echo) к последующей (tr)
  • tr — заменяет каждую точку с запятой (а именно ей разделяются пути) переносом на новую строку (обозначается командой \n)
7. Создание JAVA_HOME
Осталось занести путь до javac в переменную PATH (как это сделать для разных ОС).
Перед этим необходимо создать собственную переменную окружения, которая будет хранить путь до директории с установленным JDK. Обычно ее называют JAVA_HOME.
7.1. Почему бы сразу не занести путь в PATH?
Дело в том, что в будущем, когда вы будете изучать такие инструменты как Apache Tomcat, Gradle, Maven и т. д., они будут искать путь до JDK именно в переменной JAVA_HOME. Чтобы в последствии не возвращаться к этому вопросу, как говорится — один раз сделал и забыл!
Получается, что JAVA_HOME нужна не самой Java, а этим сторонним приложениями. Но нам для работы нужно JAVA_HOME все же записать в PATH, т. к. терминал напрямую с JAVA_HOME не работает. Ему нужна именно Path.
Создадим JAVA_HOME в качестве системной переменной.
При редактировании Path соблюдайте осторожность — эта переменная содержит важную информацию! Ничего не удаляйте из нее без ясного понимания, для чего вы это делаете.
А теперь занесем ее в Path, добавив \bin.
Не забудьте добавить \bin к %JAVA_HOME%, иначе терминал не найдет необходимые инструменты (javac, java и т. д.), которые находятся в этой папке. Перезапустите терминал.
Снова пробуем запустить javac -version, а заодно и java -version.
После всех выполненных настроек, утилиты java и javac успешно заработали: терминал их видит и позволяет использовать без указания полного пути до их размещения.
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!