Потратив время и силы на начальную установку и настройку среды разработки - Вы избавите себя от излишних препятствий, выполняя простейшие обучающие задачки.
Программист не обязан знать то, как перепрошить утюг, но точно должен знать свою среду разработки.
Windows or Unix-like?
Windows вполне жизнеспособная система для разработки на языке java. Но всегда есть "НО". В процессе обучения, любому языку программирования, Вы неизбежно знакомитесь с различными инструментами разработки. Вы в любом случае будете настраивать переменные среды окружения, познавать консоль, управлять зависимостями. И лучше сразу делать это на Unix-like системе(MacOs, Ubuntu, FreeBSD & others) чем крутить "костыли" к Windows и удивляться :)
Тем более, что все учебные примеры этого курса осуществляются в Unix-like операционной системе (ОС).
И если в вашей жизни была только Windows — не беда, рекомендую:
-
Или полноценный linux установленный параллельно/вместо Windows. Особенно если у вас совсем слабый компьютер. Да, это требует некоторых базовых знаний по инсталляции операционных систем. Но это придется познать, если Вы собираетесь писать программы для компьютеров, а 96% серверов работают под Unix-like системами. Тем более, что инструкций "на пальцах" по инсталляции операционных систем — море.
Например, Ubuntu (лучше LTS версия) - ставится очень хорошо и просто. Даже рядом с Windows 10. Заставит вас, со временем, разобраться в терминале. И, возможно, возненавидеть его, а там один шаг... ))
Например, можно и Linux Mint попробовать — он легче воспринимается пользователями Windows. Основан на Ubuntu.
Например, можно и Kubuntu попробовать — тоже легче воспринимается пользователями Windows. Также основан на Ubuntu. Просто оболочка другая.
Вот простая подсказка как установить Ubuntu параллельно Windows 10. Сразу обращаю ваше внимание на то, что и Windows должна быть установлена в UEFI режиме с разметкой диска GPT и Ubuntu должна быть записана на флешку с соответствующими параметрами. Рекомендую писать образ на флешку программой rufus.
Любые вопросы по операционным системам можно задать в нашем телеграм-чате
-
Или Cygwin - UNIX-подобная среда и интерфейс командной строки для Microsoft Windows. Многие пользуются именно этой программой, при разработке под ОС Windows.
Потребует много внимания к пакетам на этапе установки. Сразу для удобства, после установки, включите "понимание звездочек" командой shopt -s globstar.
Cygwin создает свою домашнюю папку где-то на системном диске и там уже обитает пользователь. То есть Cygwin не пользуется стандартными домашними директориями Windows, но может по ним перемещаться.
-
Или просто сразу установите систему контроля версий Git — все равно понадобится. В ее составе идет git-BASH (MINGW64). Под капотом работает такой же эмулятор как и в Cygwin — mintty. Ведет себя как unix-like терминал и вызывается из любой директории в системе — очень удобно. Для очень начальной разработки на java под ОС Windows — хватит с головой!
В процессе установки в меню компонентов в пункте Windows Explorer integration ставим галочку напротив подпункта Git Bash Here. Удобно запускается из любой папки в контекстном мено по ПКМышки. А во избежание использования визуального интерфейса гита - убираем галочку со словами Git GUI. Git-BASH хорошо интегрирован с файловой системой Windows. Не создает своих файловых систем и домашних папок как Cygwin, а просто пользуется структурой директорий Windows. Но этот интерфейс очень урезан, по сравнению с терминалом линукса и не имеет такого пакетного менеджера как apt-get или такого простого управления пакетами как в Cygwin. Но позволит выполнять простейшие команды, создавать элиасы, компилировать и запускать программы. Для начала - "самое оно"!
Все, приведенные выше, варианты выбора ОС для разработки не являются строгими рекомендациями. Экспериментируйте, комбинируйте.
Например, можно установить Git в Windows и на нем познавать секреты BASH, а можно использовать CMD или PowerShell, просто подправляя некоторые команды под ОС Windows. Для обучения — этого хватит!
И опять "НО", помните: 96++ процентов серверов работают на Unix-like системах — целые программные экосистемы выращены для/вокруг этих ОС. И ваши программы так или иначе будут касаться их. И про Android не забывайте — это тоже Unix-like система.
Родной терминал и менеджер пакетов в Windows
В Windows есть терминал, в котором можно открывать несколько вкладок с CMD, PowerShell или даже Azure Cloud Shell. Устанавливается из магазина. Называется Windows Terminal. Он будет удобен для тех, кто использует Ubuntu внутри Windows.
Вот документация на это приложение.
Пакетный менеджер называется winget (Windows Package Manager Client). На 20.05.2020 его можно получить только по программе предварительной оценки Windows. Вот ссылка на репозиторий. Там есть инструкция по установке.
Java Development Kit
Для компиляции программ нам понадобится комплект для разработчика JDK. Который, кстати, включает в себя и обычную JRE.
На данный момент существует две основных ветки JDK:
- OracleJDK — проприетарная ветка с закрытым кодом и различными патентами и ограниченными правами на использование.
- OpenJDK — это ветка с открытым исходным кодом.
Качаем и устанавливаем JDK
Для начала нужно определится с веткой JDK и версией. Версию рекомендую ставить восьмую, т.к. курс построен на ней. А выбор ветки, на данный момент, лучше делать основываясь на удобстве использования конкретно в вашем случае. Например у меня, в Windows стоит OracleJDK, а в Ubuntu OpenJDK.
Очень удобно устанавливать и управлять различными средствами разработки с помощью SDKMAN!. SDKMAN! даже позволяет назначать свою JDK для отдельной папки/проекта.
Если хотите вручную скачать и установить:
-
Общая страница выбора OracleJDK - Тут Вы можете выбрать любую необходимую версию OracleJDK. Загрузка более старых версий OracleJDK доступна только после регистрации в системе Oracle. Еще более древние релизы OracleJDK доступны по пункту Java Archive в самом низу страницы загрузки.
-
OpenJDK на сайте проекта.
Необходимо скачать подходящую версию JDK именно под вашу операционную систему.
В Windows необходимо обязательно скачать и запустить, соответственно, исполняемый файл. Как установить JDK - видео инструкция установки JDK на Windows 10.
Управление версиями JDK проще осуществлять:
- в Ubuntu с помощью команды update-java-alternatives или SDKMAN!.
- в Windows с помощью изменения переменной JAVA_HOME в переменных среды окружения (об этом ниже) или SDKMAN!. Можно, конечно, еще использовать пакетный менеджер CHOCO. Но мне кажется, что проще поменять одну переменную среды окружения, для переключения разных версий JDK в системе.
Переменные среды окружения
Это переменные, в которых, в частности, указаны пути к исполняемым файлам в операционной системе.
BASH: javac command not found — говорит о том, что в системе не установлен JDK или неправильно прописаны переменные среды. Система просто не видит исполняемые файлы java. Такое часто бывает на Windows. Повторяю: JRE входит в состав JDK! Но не наоборот.
Рекомендую создать переменную среды JAVA_HOME, которая будет содержать путь к папке с конкретной версией JDK, а в переменной PATH к JAVA_HOME добавить уже /bin (\bin - для windows). Это позволит подменять версию JDK во всей системе простым изменением пути к нужному JDK в переменной JAVA_HOME. Для того чтобы эти изменения подхватывались в терминале, нужно перезапустить его, чтобы он заново прочитал переменные среды окружения. Естественно, после сохранения изменений в переменных среды окружения.
В Windows нужно еще, ко всему, удалить строку пути к java в переменной Path в окошке системные переменные (нижнее). Чтобы не было разночтений путей к java. Иначе возникнет ситуация, когда код компилируется, скажем, под java13, а запустить Вы его пытаетесь на java8 и тому подобное.
То есть, в любой системе, должна быть одна переменная JAVA_HOME и одно ее упоминание в переменной Path с постфиксом /bin. Любые другие ссылки на java нужно убрать, аккуратно, из переменной Path.
Про IDEA
В начале обучения IntelliJ IDEA не будет часто нужна — все в терминале будем понимать. Но изучать эту среду разработки постепенно уже нужно.
Для обучения работе с IDEA стоит применить плагин IDEA Features Trainer — требует установки в самой IDEA в настройках. Settings -> Plugins -> Browse Repositories ищем там. После установки этого плагина — в IDEA появится желтенький значок Learn Intellij IDEA.
Обращаю ваше внимание на то, что отдельные *.java файлы или малое их количество проще компилировать и запускать из консоли. Это не только проще чем в разухабистой IDEA, но и позволит Вам вникнуть в то, как работает система команд в терминале. Каждая ошибочка или необходимость разухабистой команды в терминале — заставляет лучше вникнуть в тонкости экосистемы языка.
После детальной настройки под себя — не забудьте импортировать эти настройки ;) File —> Import Settings...
Это позволит восстанавливать настройки, после чрезмерных экспериментов с ними.
Про sublime
Сайт Sublime Text.
Очень рекомендую для простых задач на пару файлов. По сравнению с IDEA сильно легковеснее. Но тоже дает возможность работать с разухабистыми проектами. Также sublime имеет свою базу плагинов Preferences —> Package Control.
Для вызова sublime из терминала или для определения его как редактора по умолчанию, например, для Git или еще какого приложения — используйте файл с именем subl. И для того чтобы не ловить "subl" - command not found — пропишите путь к нему, в переменной Path в переменных среды окружения.
Пример запуска из терминала: subl README.md.
К сожалению, sublime не имеет простого способа импорта/экспорта любимых настроек. Для этого нужны или какие-то плагины, или нужно переносить папки sublime из директории пользователя.
- javac - команда, которая компилирует java-код в байт-код. Например из файла Main.java в файл Main.class. Может принимать на вход как один файл, так и перечень файлов. Файлы для компиляции необходимо указывать с расширением *.java.
- javap - это дизассемблер, так сказать. Он показывает содержимое файлов *.class. Эта команда пригодится в одном из следующих курсов, а потом и в разработке, тестировании.
- java - это команда, которая запускает байт-код в виртуальной машине java. Запускает на исполнение, например, Main.class или MyProgram.jar. Вот эта команда и нужна для запуска скомпилированных файлов. На вход этой команде нужно подавать скомпилированный класс, но без расширения, только его имя. Например, так: java Main.
Вам придется проявить внимательность и любознательность. Даже эти простейшие команды имеют свои особенности применения к файлам. Обязательно читайте обсуждения к каждому уроку и не стесняйтесь пользоваться поисковиком, задавать вопросы.
И еще чуть-чуть. :)
Вам должно показаться, что в этом уроке слишком много информации по среде разработчика. Но уверяю — Вам еще предстоит многое узнать. А в этом уроке собрана базовая информация о настройке среды разработки, к которой Вы будете время-от-времени возвращаться в начале своего java-пути. И пока Вы в начале: экспериментируйте, совершайте ошибки.
Задавайте возникающие вопросы по теме в обсуждениях к уроку. Там же можно найти вопросы схожие с Вашим или идентичный.
Оформляйте свои вопросы в разметке Markdown или пользоваться соответствующими кнопками над полем ввода текста своего вопроса — это повысит читабельность Ваших сообщений. Так же, знание Markdown, пригодится в оформлении описания или документации на собственные проекты.
Markdown, как говорит Википедия: "..облегченный язык разметки, созданный с целью написания наиболее читаемого и удобного для правки текста, но пригодного для преобразования в языки для продвинутых публикаций (HTML, Rich Text и других).".
Markdown пригодится:
- для описания собственных проектов и документации в файлах `README.md`;
- для красивого и читабельного оформления своих вопросов тут на hexlet.io.
Вот очень полезная статья, которая поможет понять как лучше и точнее задавать вопросы по возникающим у Вас проблемам и задачам. Это статья пригодиться Вам не только в любом обучении, но и в любой работе. Потому что корректно сформулированный вопрос чаще приводит к корректному ответу ;)
<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 17:12:29 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="NX6J10foCjoE8X4za5GQu3lMro2_Z499TarXL_zY7rXar0LgtZanWrKyWqtnnmDMuUWDJ7dQcd_wSk17rt8J2w";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. | Введение в Java</title>
<meta name="description" content="Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. / Введение в Java: Установить и настроить среду для комфортной работы с Java.">
<link rel="canonical" href="https://ru.hexlet.io/courses/java_101/lessons/java_dev_env_setup/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.">
<meta property="og:title" content="Введение в Java">
<meta property="og:description" content="Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. / Введение в Java: Установить и настроить среду для комфортной работы с Java.">
<meta property="og:url" content="https://ru.hexlet.io/courses/java_101/lessons/java_dev_env_setup/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="CIMzWw_9_M7LNrdcOw8Oq5HFHtpVDQk5LDNivxq2ugjnUvhs_YNRrn11k8Q3AP7cUcwzcF0695uR0_jrSLFdZg" />
<script src="/vite/assets/inertia-INZxX8jp.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-nkZBEvfU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-6pOtQ3OW.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<div id="app" data-page="{"component":"web/courses/lessons/theory_unit","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T17:12:29.419Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"NEFyrIyGWSz8BdIg3Jcps8syu1LnuCY3OU7hhf1BnwbbkLmbfvj0TEpG9rjQmNnECzuW-O-P2JWErnvRr0Z4aA","topics":[{"id":5132,"title":"Cygwin у меня живет собственной жизнью((( javaс и javap увидел после export PATH, тем не менее, не скомпилировал файл в bash. Javap сработал с class, но... пока я не закрыла Cygwin. После чего уже и expert не помог...\n ","plain_title":"Cygwin у меня живет собственной жизнью((( javaс и javap увидел после export PATH, тем не менее, не скомпилировал файл в bash. Javap сработал с class, но... пока я не закрыла Cygwin. После чего уже и expert не помог... ","creator":{"public_name":"Диана Кот","id":117529,"is_tutor":false},"comments":[{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":8988,"body":"Попробуйте поставить babun.github.io это настроенный cygwin с кучей плюшек.","topic_id":5132},{"creator":{"public_name":"Диана Кот","id":117529,"is_tutor":false},"id":9029,"body":"Спасибо!","topic_id":5132}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":15147,"title":"IntelleJI при запуске Hello world выдает 2 \nошибки при компиляции\n\n","plain_title":"IntelleJI при запуске Hello world выдает 2 ошибки при компиляции ","creator":{"public_name":"Ruslan Amirgaliyev","id":174374,"is_tutor":false},"comments":[{"creator":{"public_name":"Ruslan Amirgaliyev","id":174374,"is_tutor":false},"id":31833,"body":"все сделал с нуля, установки JDK + настройки и переписал код.\nвсе заработало \"Привет МИР\")), спасибо","topic_id":15147},{"creator":{"public_name":"Ruslan Amirgaliyev","id":174374,"is_tutor":false},"id":31789,"body":"cygdrive на команды java -version, javac, javap вроде реагирует как надо","topic_id":15147},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":31835,"body":"Все же, думаю, дело было в коде ;)\n\nИначе консоль бы ответила: `javac command not found`.","topic_id":15147},{"creator":{"public_name":"Ruslan Amirgaliyev","id":174374,"is_tutor":false},"id":31827,"body":"я тоже так думаю\nв консоли тоже ошибка\n```\n$ javac Main.java\nMain.java:4: error: class, interface, or enum expected\n public static void main(String[] args) {\n ^\nMain.java:6: error: class, interface, or enum expected\n }\n ^\n2 errors\n```\n","topic_id":15147},{"creator":{"public_name":"Ruslan Amirgaliyev","id":174374,"is_tutor":false},"id":31836,"body":"У меня возникли сомнения в настройках JDK т.к. готовый код в задании №2 для компиляции тоже не пошел","topic_id":15147},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":31831,"body":"Это не ошибка путей проекта, а ошибка в коде.\nНужно видеть код.\n\nP.S. Прошу оформлять сообщения в **markdown syntax**, выделяя в тексте код, вывод компилятора, ключевые слова. Это необходимо для удобства чтения и понимания, особенно кода. ","topic_id":15147},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":31814,"body":"А какие ошибки? А при запуске чисто в консоли работает(`javac *.java`)?\nСкорее всего это ошибки не в коде, а в настройках путей проекта.","topic_id":15147}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":236,"title":"Не могу понять в чем проблема со вторым заданием:\n\n\n> $ javap Main.java\n> Error: class not found: Main.java\n\n","plain_title":"Не могу понять в чем проблема со вторым заданием: $ javap Main.java Error: class not found: Main.java ","creator":{"public_name":"","id":49961,"is_tutor":false},"comments":[{"creator":{"public_name":"Роман Черепанов","id":57,"is_tutor":false},"id":427,"body":"`javap` - это команда для дизассемблирования байт-кода. См. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html","topic_id":236},{"creator":{"public_name":"Роман Черепанов","id":57,"is_tutor":false},"id":425,"body":"правильная команда `java Main.java`","topic_id":236},{"creator":{"public_name":"Rakhim D.","id":42197,"is_tutor":false},"id":426,"body":"Покажите, пожалуйста, содержание файла Main.java","topic_id":236},{"creator":{"public_name":"Alexander First","id":62343,"is_tutor":false},"id":2103,"body":"У меня всеравно не запускается","topic_id":236}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":2584,"title":"C Windows 7 так заморочено!!! Разобрался!\nСпасибо!\n\n ","plain_title":"C Windows 7 так заморочено!!! Разобрался! Спасибо! ","creator":{"public_name":"Юрий Блинов","id":84797,"is_tutor":false},"comments":[{"creator":{"public_name":"денис барабошкин","id":107666,"is_tutor":false},"id":6403,"body":"В чем оказалась проблема?","topic_id":2584}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":1219,"title":"При запуске из консоли выдает такое сообщение:\n\n$ javac main.java\nmain.java:3: <identifier> expected\n public static void main(String... args) {\n ^\nmain.java:4: <identifier> expected\n System.out.println(String.class.toString());\n ^\nmain.java:4: <identifier> expected\n System.out.println(String.class.toString());\n ^\nmain.java:4: '{' expected\n System.out.println(String.class.toString());\n ^\n4 errors\n\n","plain_title":"При запуске из консоли выдает такое сообщение: $ javac main.java main.java:3: expected public static void main(String... args) { ^ main.java:4: expected System.out.println(String.class.toString()); ^ main.java:4: expected System.out.println(String.class.toString()); ^ main.java:4: '{' expected System.out.println(String.class.toString()); ^ 4 errors ","creator":{"public_name":"","id":57122,"is_tutor":false},"comments":[{"creator":{"public_name":"","id":57122,"is_tutor":false},"id":2378,"body":"public class Main {\n\t\n\tpublic static void main(String... args) {\n\t\tSystem.out.println(String.class.toString());\n\t}\n\n}\n\nКод взят из файла задания \n\nСкачайте, скомпилируйте и запустите из консоли класс файл (ссылка - https://s3.amazonaws.com/java_101/m0/e3/Main.java). Отобразившийся на экране текст введите в качестве ответа\n\nиспользуется команда javac","topic_id":1219},{"creator":{"public_name":"Вячеслав Ковалевский","id":5,"is_tutor":false},"id":2407,"body":"файл должен имет название Main.java иначе это разные классы","topic_id":1219},{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":2325,"body":"Напишите, пожалуйста свой код.","topic_id":1219}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":370,"title":"Спасибо за курс. Понимаю, конечно, что это мелочи, но все-таки стоит добавить в урок пояснение для неправославных windows-пользователей, что прописывать в path путь к jdk обязательно, и что cygwin обязательно перезапускать после этого.\nВроде бы простое Д/З превратилось в 20 минут, наполненных танцами с бубном.","plain_title":"Спасибо за курс. Понимаю, конечно, что это мелочи, но все-таки стоит добавить в урок пояснение для неправославных windows-пользователей, что прописывать в path путь к jdk обязательно, и что cygwin обязательно перезапускать после этого. Вроде бы простое Д/З превратилось в 20 минут, наполненных танцами с бубном. ","creator":{"public_name":"Dmitry Skurikhin","id":50924,"is_tutor":false},"comments":[{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":1002,"body":"Спасибо за замечание. Этот вопрос обсуждался в комментариях к уроку ранее.","topic_id":370}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":39850,"title":"Error: Could not find or load main class Main.class\n","plain_title":"Error: Could not find or load main class Main.class ","creator":{"public_name":"Андрей Калачев","id":271436,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":87271,"body":"Начнем с этого: https://ru.hexlet.io/blog/posts/question-rules","topic_id":39850},{"creator":{"public_name":"Андрей Турубчук","id":110605,"is_tutor":false},"id":95503,"body":"**Андрей Калачев**, как я понял, нужно запустить java Main, а не java Main.class\n","topic_id":39850}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":41955,"title":"Здравствуйте друзья! OC Windows\nПроблема такая:\n- Утановил Ubuntu для винды, скачал и установил Jdk, настроил правильно. \n- Так же внутри самой ubuntu установил свой jdk\n- Сохраняю файл из Subline в директорию, которую создал в треминале Ubuntu. В Винде эта директория находится по адресу:\nC:\\Users\\evgen\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\\home\\evgen\\Java \n\nНо терминал не видит эти сохраненные файлы. Я так понимаю это из за конфликта прав доступа? Сложно пока представить как это пофиксить, кроме как установить полноценный дистрибутив рядом с Windows. ","plain_title":"Здравствуйте друзья! OC Windows Проблема такая. Утановил Ubuntu для винды, скачал и установил Jdk, настроил правильно. Сохраняю файл из Subline в директорию, которую создал в треминале Ubuntu, C:\\Users\\evgen\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\\home\\evgen\\Java Но терминал не видит эти сохраненные файлы. Я так понимаю это из за конфликта прав доступа? Сложно пока представить как это пофиксить, кроме как установить полноценный дистрибутив рядом с Windows. ","creator":{"public_name":"Евгений Светличный","id":236031,"is_tutor":false},"comments":[{"creator":{"public_name":"Евгений Светличный","id":236031,"is_tutor":false},"id":91322,"body":"**Сергей Алексеенко**,\n\nНе самый гуманный метод, но после переустановки ubuntu и jdk, все отображается. Только время ваше потратил). Спасибо за ваши советы. Мне кажется, что комфортнее макбука для меня ничего не будет) ","topic_id":41955},{"creator":{"public_name":"Евгений Светличный","id":236031,"is_tutor":false},"id":91315,"body":"Да, по команде ls -a ничего нет. \nНет, я же написал, что поставил jdk в том числе и на ubuntu, введя команду:\n sudo apt install openjdk-8-jdk\n\nУстановка прошла без ошибок.","topic_id":41955},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":91331,"body":"**Евгений Светличный**, радикальненько )\n\nНо лучше чем костыль в виде операционки в операционке.\n","topic_id":41955},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":91314,"body":"Здравствуйте.\n\nОбе системы должны видеть файлы. \n\nИ что значит \"не видит\"? Просто не отображаются по команде \"`ls -a`\" в указанной вами папке?\n\nПредположу, что Вы установили jdk только в Windows. А это значит, что в терминале \"Ubuntu для винды\" jdk будет недоступна.\n\n> Сложно пока представить как это пофиксить, кроме как установить полноценный дистрибутив рядом с Windows.\n\nСначала нужно понять причину. Рекомендую не спешить. И, даже, если вам легко удастся пофиксить эту проблему — попробуйте и другие подходы с организацией unix-like системы на своем компьютере.\n\nЛучше потратить на это время сейчас и разобраться в том, что лично вам удобнее, чем потом, во время работы над кодом, отвлекаться на переделку рабочей среды.","topic_id":41955}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":3242,"title":"Здравствуйте Вячеслав!\nВы говорили про cygvin.Вот бы настроить в нём java, ну чтобы в консоли компилировать java-код","plain_title":"Здравствуйте Вячеслав! Вы говорили про cygvin.Вот бы настроить в нём java, ну чтобы в консоли компилировать java-код ","creator":{"public_name":"Zb,fk Ubr,h'qycDhjn","id":93638,"is_tutor":false},"comments":[{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":5728,"body":"Посмотрите [здесь](http://stackoverflow.com/questions/4918830/how-can-i-set-my-cygwin-path-to-find-javac)","topic_id":3242},{"creator":{"public_name":"Владимир Валерьевич Бобков","id":113961,"is_tutor":false},"id":8938,"body":"Спасибо!","topic_id":3242}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}},{"id":1549,"title":"[](http://prntscr.com/88cnsu \"enter image title here\")\nПодскажите в чем проблема? При попытке компилировать пишет \"команда не найдена\"","plain_title":" (http://prntscr.com/88cnsu) Подскажите в чем проблема? При попытке компилировать пишет \"команда не найдена\" ","creator":{"public_name":"Динислам Маушов","id":66244,"is_tutor":false},"comments":[{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":2695,"body":"https://ru.hexlet.io/topics/214\n\nhttps://ru.hexlet.io/topics/536","topic_id":1549},{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":3264,"body":"Спасибо, примем во внимание.","topic_id":1549},{"creator":{"public_name":"Вячеслав Ковалевский","id":5,"is_tutor":false},"id":2694,"body":"https://ru.hexlet.io/topics/214\n\nhttps://ru.hexlet.io/topics/536","topic_id":1549},{"creator":{"public_name":"Динислам Маушов","id":66244,"is_tutor":false},"id":2696,"body":"Спасибо, но причина оказалась совсем в другом (пришлось брата напряч разобраться). Дело было в разных версиях JDK и JRE (8 и 7 соответственно), ссылки на скачивание которых вы давали в модуле 1 урок 3. Могли бы как-то проконтролировать этот вопрос, все-таки курс платный. Есть еще моменты. Например совершенно не объяснено где в системе находится эта самая корневая папка Cygwin. Это необходимо знать, чтобы понять где сохранять файлы для работы в консоли. А вы это не объясняете. ","topic_id":1549}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","entity_url":null,"active":true}}],"lesson":{"exercise":null,"units":[{"id":32,"name":"theory","url":"/courses/java_101/lessons/java_dev_env_setup/theory_unit"}],"links":[],"ordered_units":[{"id":32,"name":"theory","url":"/courses/java_101/lessons/java_dev_env_setup/theory_unit"}],"id":19,"slug":"java_dev_env_setup","state":"approved","name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","course_order":5,"goal":"Установить и настроить среду для комфортной работы с Java.","self_study":null,"theory_video_provider":"youtube","theory_video_uid":"myodoR2Qxv0","theory":"_Потратив время и силы на начальную установку и настройку среды разработки - Вы избавите себя от излишних препятствий, выполняя простейшие обучающие задачки._\n\n_Программист не обязан знать то, как перепрошить утюг, но точно должен знать свою среду разработки._\n___\n\n## Windows or Unix-like?\n\nWindows вполне жизнеспособная система для разработки на языке java. Но всегда есть \"НО\". В процессе обучения, любому языку программирования, Вы неизбежно знакомитесь с различными инструментами разработки. Вы в любом случае будете настраивать _**переменные среды окружения**_, познавать консоль, управлять зависимостями. И лучше сразу делать это на Unix-like системе(MacOs, Ubuntu, FreeBSD & others) чем крутить \"костыли\" к Windows и удивляться :)\nТем более, что все учебные примеры этого курса осуществляются в Unix-like операционной системе (ОС).\n\nИ если в вашей жизни была только Windows — не беда, рекомендую:\n\n1. Или **полноценный linux** установленный параллельно/вместо Windows. Особенно если у вас совсем слабый компьютер. Да, это требует некоторых базовых знаний по инсталляции операционных систем. Но это придется познать, если Вы собираетесь писать программы для компьютеров, а 96% серверов работают под Unix-like системами. Тем более, что инструкций \"на пальцах\" по инсталляции операционных систем — море.\n\n\tНапример, [Ubuntu](https://ubuntu.com/download/desktop) (лучше LTS версия) - ставится очень хорошо и просто. Даже рядом с Windows 10. Заставит вас, со временем, разобраться в терминале. И, возможно, возненавидеть его, а там один шаг... ))\n\n\tНапример, можно и [Linux Mint](https://www.linuxmint.com/download.php) попробовать — он легче воспринимается пользователями Windows. Основан на Ubuntu.\n\n\tНапример, можно и Kubuntu попробовать — тоже легче воспринимается пользователями Windows. Также основан на Ubuntu. Просто оболочка другая.\n\n\tВот простая подсказка [как установить Ubuntu параллельно Windows 10](https://tehnot.com/kak-ustanovit-ubuntu-parallelno-s-windows-10/). Сразу обращаю ваше внимание на то, что и Windows должна быть установлена в UEFI режиме с разметкой диска `GPT` и Ubuntu должна быть записана на флешку с соответствующими параметрами. Рекомендую писать образ на флешку программой [rufus](https://rufus.akeo.ie/?locale=ru_RU).\n\n\tЛюбые вопросы по операционным системам можно задать в нашем [телеграм-чате](https://t.me/hexletcommunity)\n\n2. Или [Cygwin](https://cygwin.com/install.html) - UNIX-подобная среда и интерфейс командной строки для **Microsoft Windows**. Многие пользуются именно этой программой, при разработке под ОС Windows.\n\n\tПотребует много внимания к пакетам на этапе установки. Сразу для удобства, после установки, включите \"понимание звездочек\" командой `shopt -s globstar`.\n\t`Cygwin` создает свою домашнюю папку где-то на системном диске и там уже обитает пользователь. То есть `Cygwin` не пользуется стандартными домашними директориями Windows, но может по ним перемещаться.\n\n3. Или просто сразу установите [систему контроля версий Git](https://git-scm.com/download/win) — все равно понадобится. В ее составе идет git-BASH (MINGW64). Под капотом работает такой же эмулятор как и в Cygwin — mintty. Ведет себя как unix-like терминал и вызывается из любой директории в системе — очень удобно. Для очень начальной разработки на java под ОС Windows — хватит с головой!\n\n\tВ процессе установки в меню компонентов в пункте `Windows Explorer integration` ставим галочку напротив подпункта `Git Bash Here`. Удобно запускается из любой папки в контекстном мено по ПКМышки. А во избежание использования визуального интерфейса гита - убираем галочку со словами `Git GUI`. Git-BASH хорошо интегрирован с файловой системой **Windows**. Не создает своих файловых систем и домашних папок как `Cygwin`, а просто пользуется структурой директорий Windows. Но этот интерфейс очень урезан, по сравнению с терминалом линукса и не имеет такого пакетного менеджера как `apt-get` или такого простого управления пакетами как в `Cygwin`. Но позволит выполнять простейшие команды, создавать элиасы, компилировать и запускать программы. Для начала - \"самое оно\"!\n\n>_Все, приведенные выше, варианты выбора ОС для разработки не являются **строгими** рекомендациями. Экспериментируйте, комбинируйте._\n>_Например, можно установить Git в Windows и на нем познавать секреты BASH, а можно использовать CMD или PowerShell, просто подправляя некоторые команды под ОС Windows. Для обучения — этого хватит!_\n>_И опять \"НО\", помните: 96++ процентов серверов работают на Unix-like системах — целые программные экосистемы выращены для/вокруг этих ОС. И ваши программы так или иначе будут касаться их. И про Android не забывайте — это тоже Unix-like система._\n\n## Родной терминал и менеджер пакетов в Windows\n\n В Windows есть терминал, в котором можно открывать несколько вкладок с CMD, PowerShell или даже Azure Cloud Shell. Устанавливается из магазина. Называется Windows Terminal. Он будет удобен для тех, кто использует Ubuntu внутри Windows.\n\n [Вот документация](https://docs.microsoft.com/ru-ru/windows/terminal/) на это приложение.\n\n Пакетный менеджер называется `winget` (Windows Package Manager Client). На 20.05.2020 его можно получить только по программе предварительной оценки Windows. [Вот ссылка на репозиторий](https://github.com/microsoft/winget-cli). Там есть инструкция по установке.\n\n## Java Development Kit\n\nДля компиляции программ нам понадобится комплект для разработчика JDK. Который, кстати, включает в себя и обычную JRE.\n\nНа данный момент существует две основных ветки JDK:\n\n1. OracleJDK — проприетарная ветка с закрытым кодом и различными патентами и ограниченными правами на использование.\n2. OpenJDK — это ветка с открытым исходным кодом.\n\n### Качаем и устанавливаем JDK\n\nДля начала нужно определится с веткой JDK и версией. Версию рекомендую ставить восьмую, т.к. курс построен на ней. А выбор ветки, на данный момент, лучше делать основываясь на удобстве использования конкретно в вашем случае. Например у меня, в Windows стоит OracleJDK, а в Ubuntu OpenJDK.\n\nОчень удобно устанавливать и управлять различными средствами разработки с помощью [SDKMAN!](https://sdkman.io/install). SDKMAN! даже позволяет назначать свою JDK для отдельной папки/проекта.\n\n\nЕсли хотите вручную скачать и установить:\n\n1. [Общая страница выбора OracleJDK](https://www.oracle.com/java/technologies/downloads/) - Тут Вы можете выбрать любую необходимую версию OracleJDK. Загрузка более старых версий OracleJDK доступна только после регистрации в системе Oracle. Еще более древние релизы OracleJDK доступны по пункту `Java Archive` в самом низу страницы загрузки.\n2. [OpenJDK на сайте проекта](https://jdk.java.net/).\n\nНеобходимо скачать подходящую версию JDK именно под вашу операционную систему.\n\n\nВ Windows необходимо обязательно скачать и запустить, соответственно, исполняемый файл. [Как установить JDK](https://youtu.be/EEqScHr_bec) - видео инструкция установки JDK на Windows 10.\n\nУправление версиями JDK проще осуществлять:\n\n- в Ubuntu с помощью команды `update-java-alternatives` или SDKMAN!.\n- в Windows с помощью изменения переменной `JAVA_HOME` в переменных среды окружения (об этом ниже) или SDKMAN!. Можно, конечно, еще использовать пакетный менеджер [CHOCO](https://pyatilistnik.org/choco-repository-fast-software-update/). Но мне кажется, что проще поменять одну переменную среды окружения, для переключения разных версий JDK в системе.\n\n### Переменные среды окружения\n\nЭто переменные, в которых, в частности, указаны пути к исполняемым файлам в операционной системе.\n\n`BASH: javac command not found` — говорит о том, что в системе не установлен JDK или неправильно прописаны переменные среды. Система просто не видит исполняемые файлы java. Такое часто бывает на Windows. Повторяю: JRE входит в состав JDK! Но не наоборот.\n\n\nРекомендую создать переменную среды `JAVA_HOME`, которая будет содержать путь к папке с конкретной версией JDK, а в переменной `PATH` к `JAVA_HOME` добавить уже `/bin` (`\\bin` - для windows). Это позволит подменять версию JDK во всей системе простым изменением пути к нужному JDK в переменной `JAVA_HOME`. Для того чтобы эти изменения подхватывались в терминале, нужно перезапустить его, чтобы он заново прочитал переменные среды окружения. Естественно, после сохранения изменений в переменных среды окружения.\n\nВ Windows нужно еще, ко всему, удалить строку пути к java в переменной `Path` в окошке **системные переменные** (нижнее). Чтобы не было разночтений путей к java. Иначе возникнет ситуация, когда код компилируется, скажем, под java13, а запустить Вы его пытаетесь на java8 и тому подобное.\n\nТо есть, в любой системе, должна быть одна переменная `JAVA_HOME` и одно ее упоминание в переменной `Path` с постфиксом `/bin`. Любые другие ссылки на java нужно убрать, аккуратно, из переменной `Path`.\n\n## Про IDEA\n\nВ начале обучения IntelliJ IDEA **не будет** часто нужна — все в терминале будем понимать. Но изучать эту среду разработки постепенно уже нужно.\n\nДля обучения работе с IDEA стоит применить плагин `IDEA Features Trainer` — требует установки в самой IDEA в настройках. `Settings -> Plugins -> Browse Repositories` ищем там. После установки этого плагина — в IDEA появится желтенький значок `Learn Intellij IDEA`.\n\nОбращаю ваше внимание на то, что отдельные `*.java` файлы или малое их количество проще компилировать и запускать из консоли. Это не только проще чем в разухабистой IDEA, но и позволит Вам вникнуть в то, как работает система команд в терминале. Каждая ошибочка или необходимость разухабистой команды в терминале — заставляет лучше вникнуть в тонкости экосистемы языка.\n\n- [Intellij IDEA](https://www.jetbrains.com/idea/?gclid=CMyLmt376L8CFaKD2wodkpMAxA)\n- [Быстрые клавиши для Intellij IDEA](https://www.jetbrains.com/idea/help/keyboard-shortcuts-you-cannot-miss.html)\n\nПосле детальной настройки под себя — не забудьте импортировать эти настройки ;) `File —> Import Settings...`\nЭто позволит восстанавливать настройки, после чрезмерных экспериментов с ними.\n\n## Про sublime\n\n[Сайт Sublime Text](https://www.sublimetext.com).\n\nОчень рекомендую для простых задач на пару файлов. По сравнению с IDEA сильно легковеснее. Но тоже дает возможность работать с разухабистыми проектами. Также sublime имеет свою базу плагинов `Preferences —> Package Control`.\n\nДля вызова sublime из терминала или для определения его как редактора по умолчанию, например, для Git или еще какого приложения — используйте файл с именем `subl`. И для того чтобы не ловить `\"subl\" - command not found` — пропишите путь к нему, в переменной `Path` в переменных среды окружения.\n\nПример запуска из терминала: `subl README.md`.\n\nК сожалению, sublime не имеет простого способа импорта/экспорта любимых настроек. Для этого нужны или какие-то плагины, или нужно переносить папки sublime из директории пользователя.\n\n## Базовые команды языка java в консоли\n\n- `javac` - команда, которая компилирует java-код в байт-код. Например из файла `Main.java` в файл `Main.class`. Может принимать на вход как один файл, так и перечень файлов. Файлы для компиляции необходимо указывать с расширением `*.java`.\n- `javap` - это дизассемблер, так сказать. Он показывает содержимое файлов `*.class`. Эта команда пригодится в одном из следующих курсов, а потом и в разработке, тестировании.\n- `java` - это команда, которая запускает байт-код в виртуальной машине java. Запускает на исполнение, например, `Main.class` или `MyProgram.jar`. Вот эта команда и нужна для запуска скомпилированных файлов. На вход этой команде нужно подавать скомпилированный класс, но без расширения, только его имя. Например, так: `java Main`.\n\nВам придется проявить внимательность и любознательность. Даже эти простейшие команды имеют свои особенности применения к файлам. Обязательно читайте **обсуждения** к каждому уроку и не стесняйтесь пользоваться поисковиком, задавать вопросы.\n\n## И еще чуть-чуть. :)\n\nВам должно показаться, что в этом уроке слишком много информации по среде разработчика. Но уверяю — Вам еще предстоит многое узнать. А в этом уроке собрана базовая информация о настройке среды разработки, к которой Вы будете время-от-времени возвращаться в начале своего java-пути. И пока Вы в начале: экспериментируйте, совершайте ошибки.\n\nЗадавайте возникающие вопросы по теме в **обсуждениях** к уроку. Там же можно найти вопросы схожие с Вашим или идентичный.\n\nОформляйте свои вопросы в разметке **Markdown** или пользоваться соответствующими кнопками над полем ввода текста своего вопроса — это повысит читабельность Ваших сообщений. Так же, знание Markdown, пригодится в оформлении описания или документации на собственные проекты.\n[Markdown](https://guides.hexlet.io/ru/markdown/), как говорит Википедия: \"..облегченный язык разметки, созданный с целью написания наиболее читаемого и удобного для правки текста, но пригодного для преобразования в языки для продвинутых публикаций (HTML, Rich Text и других).\".\n\n**Markdown** пригодится:\n\n\t- для описания собственных проектов и документации в файлах `README.md`;\n\t- для красивого и читабельного оформления своих вопросов тут на hexlet.io.\n\n[Вот очень полезная статья](https://ru.hexlet.io/blog/posts/question-rules), которая поможет понять как лучше и точнее задавать вопросы по возникающим у Вас проблемам и задачам. Это статья пригодиться Вам не только в любом обучении, но и в любой работе. Потому что корректно сформулированный вопрос чаще приводит к корректному ответу ;)\n"},"lessonMember":null,"courseMember":null,"course":{"start_lesson":{"exercise":null,"units":[{"id":4,"name":"theory","url":"/courses/java_101/lessons/intro_to_java/theory_unit"}],"links":[],"ordered_units":[{"id":4,"name":"theory","url":"/courses/java_101/lessons/intro_to_java/theory_unit"}],"id":3,"slug":"intro_to_java","state":"approved","name":"Модуль 1. Урок 1. Введение в Java.","course_order":1,"goal":"Рассмотреть темы уроков сета Java 101: изучение Java с нуля, переход на Java SE8 и практическая разработка своего ПО.","self_study":null,"theory_video_provider":"youtube","theory_video_uid":"T13TlpHyxPU","theory":"## Цели курса\n\n* научиться основам программирования на Java\n* получить достаточно знаний, чтобы пройти сертификации первого уровня + основы функционального программирования из Java 8\n* получить практические навыки использования языка - написать реальный проект в процессе обучения\n\n## Условия для старта\n\n* добросовестно подходить к изучению\n* минимальное знание английского\n* необязательный опыт программирования\n* огромное желание учиться\n* внимательность!\n\nВ случае ядерной войны доступны контакты преподавателя курса (_в приоритете подписчики_):\n\n* skype: b0noii\n* e-mail: viacheslav@b0noi.com\n* twitter: [@b0noi](https://twitter.com/b0noi)\n\n## Структура курса\n\n* 10 больших модулей программы от oracle\n* на каждый модуль по 4+ урока\n* после курса будет большой тест.\n* почти каждый урок будет состоять из:\n\t- видео и текстового материала,\n\t- теста на основе теории и дополнительных материалов,\n\n## Дополнительные материалы\n\n- С первых дней обучения, уделяйте внимание [java code-style](https://www.lar.ru/java-codestyle/).\n- С тех же первых дней, у вас будет много вопросов и ошибок. Не стесняйтесь задавать вопросы! Но задавайте вопросы как можно точнее, чтобы получить точный ответ. Вот хорошая статья о том [как задавать вопросы](https://ru.hexlet.io/blog/posts/question-rules). Этот подход пригодится вам не только в обучении но и в работе!\n"},"id":31,"slug":"java_101","challenges_count":0,"name":"Введение в Java","allow_indexing":true,"state":"approved","course_state":"finished","pricing_type":"free","description":"Практический курс по Java «с нуля» от инженера с опытом работы в крупнейших ИТ-компаниях мира.\n\nКурс посвящен изучению основ Java, популярного объектно-ориентированного языка программирования, разработанного компанией Oracle. Программы на Java транслируются в байт-код, который выполняет виртуальная машина Java (JVM). JVM — это программа, обрабатывающая байтовый код и передающая инструкции оборудованию как интерпретатор. Это позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина, независимо от операционной системы и оборудования.\n\nКурс рассчитан как на людей, не сталкивавшихся с программированием, так и на начинающих программистов.\nРекомендуемое продолжение — курс [Java Generics](https://ru.hexlet.io/courses/java_generics).","kind":"sandbox","updated_at":"2026-01-20T11:54:32.501Z","language":"java","duration_cache":45120,"skills":["Создавать несложные программы, используя основные конструкции языка (условия, циклы, методы и другие)","Разделять код на методы для повторного использования","Правильно анализировать ошибки в коде и пользоваться отладочной печатью при их поиске"],"keywords":["основы Java","JVM","логика","типы данных","алгоритмы"],"lessons_count":38,"cover":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODk5NCwicHVyIjoiYmxvYl9pZCJ9fQ==--50ee157ee29e5c50f50aa2191806e9d83fca25e6/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fZmlsbCI6WzYwMCw0MDBdfSwicHVyIjoidmFyaWF0aW9uIn19--6067466c2912ca31a17eddee04b8cf2a38c6ad17/image.png"},"recommendedLandings":[],"lessonMemberUnit":null,"accessToLearnUnitExists":true,"accessToCourseExists":true},"url":"/courses/java_101/lessons/java_dev_env_setup/theory_unit","version":"0b0c6d4ebbd40fd58630a0dd89cc25544ccdf24e","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><div style="position:absolute;top:0rem" class=""></div><div style="max-width:var(--container-size-xl);height:100%;min-height:0rem" class=""><style data-mantine-styles="inline">.__m__-_R_5ub_{--grid-gutter:0rem;}</style><div style="height:100%;min-height:0rem" class="m_410352e9 mantine-Grid-root __m__-_R_5ub_"><div class="m_dee7bd2f mantine-Grid-inner" style="height:100%"><style data-mantine-styles="inline">.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:91.66666666666667%;--col-max-width:91.66666666666667%;}@media(min-width: 48em){.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem;display:flex" class="m_96bdd299 mantine-Grid-col __m__-_R_rdub_"><style data-mantine-styles="inline">.__m__-_R_6qrdub_{margin-top:0rem;padding-inline:var(--mantine-spacing-xs);width:100%;}@media(min-width: 48em){.__m__-_R_6qrdub_{margin-top:var(--mantine-spacing-xl);width:80%;}}@media(min-width: 62em){.__m__-_R_6qrdub_{padding-inline:var(--mantine-spacing-xl);}}</style><div style="margin-inline:auto;max-width:var(--mantine-breakpoint-xl)" class="__m__-_R_6qrdub_"><div style="color:var(--mantine-color-dimmed)" class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:calc(0.125rem * var(--mantine-scale));color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-lock "><path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6"></path><path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M8 11v-4a4 4 0 1 1 8 0v4"></path></svg></div><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Введение в Java</p></div><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size);margin-bottom:var(--mantine-spacing-xl)" class="m_8a5d1357 mantine-Title-root" data-order="1">Теория: Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java.","inLanguage":"ru","isPartOf":{"@type":"LearningResource","name":"Введение в Java"},"isAccessibleForFree":"False","hasPart":{"@type":"WebPageElement","isAccessibleForFree":"False","cssSelector":".paywalled"}}</script><div class=""><div style="--alert-color:var(--mantine-color-indigo-light-color);margin-bottom:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-lg)" class="m_66836ed3 mantine-Alert-root" id="mantine-_R_remqrdub_" role="alert" aria-describedby="mantine-_R_remqrdub_-body" aria-labelledby="mantine-_R_remqrdub_-title"><div class="m_a5d60502 mantine-Alert-wrapper"><div class="m_667f2a6a mantine-Alert-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-rocket "><path d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3"></path><path d="M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3"></path><path d="M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path></svg></div><div class="m_667c2793 mantine-Alert-body"><div class="m_6a03f287 mantine-Alert-title"><span id="mantine-_R_remqrdub_-title" class="m_698f4f23 mantine-Alert-label">Полный доступ к материалам</span></div><div id="mantine-_R_remqrdub_-body" class="m_7fa78076 mantine-Alert-message"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Зарегистрируйтесь и получите доступ к этому и десяткам других курсов</p><a style="--button-height:var(--button-height-xs);--button-padding-x:var(--button-padding-x-xs);--button-fz:var(--mantine-font-size-xs);--button-bg:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-hover:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-color:var(--mantine-color-white);--button-bd:none" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root" data-variant="gradient" data-size="xs" href="/u/new"><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">Зарегистрироваться</span></span></a></div></div></div></div></div><div style="margin-bottom:var(--mantine-spacing-xl)" class=""><div class="ratio ratio-16x9"><iframe width="100%" height="auto" src="//www.youtube.com/embed/myodoR2Qxv0" loading="lazy" allowFullScreen="" title="video"></iframe></div></div><div class="paywalled m_d08caa0 mantine-Typography-root"><p><em>Потратив время и силы на начальную установку и настройку среды разработки - Вы избавите себя от излишних препятствий, выполняя простейшие обучающие задачки.</em></p>
<p><em>Программист не обязан знать то, как перепрошить утюг, но точно должен знать свою среду разработки.</em></p>
<hr/>
<h2 id="heading-2-1">Windows or Unix-like?</h2>
<p>Windows вполне жизнеспособная система для разработки на языке java. Но всегда есть "НО". В процессе обучения, любому языку программирования, Вы неизбежно знакомитесь с различными инструментами разработки. Вы в любом случае будете настраивать <em><strong>переменные среды окружения</strong></em>, познавать консоль, управлять зависимостями. И лучше сразу делать это на Unix-like системе(MacOs, Ubuntu, FreeBSD & others) чем крутить "костыли" к Windows и удивляться :)
Тем более, что все учебные примеры этого курса осуществляются в Unix-like операционной системе (ОС).</p>
<p>И если в вашей жизни была только Windows — не беда, рекомендую:</p>
<ol>
<li>
<p>Или <strong>полноценный linux</strong> установленный параллельно/вместо Windows. Особенно если у вас совсем слабый компьютер. Да, это требует некоторых базовых знаний по инсталляции операционных систем. Но это придется познать, если Вы собираетесь писать программы для компьютеров, а 96% серверов работают под Unix-like системами. Тем более, что инструкций "на пальцах" по инсталляции операционных систем — море.</p>
<p>Например, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ubuntu.com/download/desktop" rel="noopener noreferrer" target="_blank">Ubuntu</a> (лучше LTS версия) - ставится очень хорошо и просто. Даже рядом с Windows 10. Заставит вас, со временем, разобраться в терминале. И, возможно, возненавидеть его, а там один шаг... ))</p>
<p>Например, можно и <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.linuxmint.com/download.php" rel="noopener noreferrer" target="_blank">Linux Mint</a> попробовать — он легче воспринимается пользователями Windows. Основан на Ubuntu.</p>
<p>Например, можно и Kubuntu попробовать — тоже легче воспринимается пользователями Windows. Также основан на Ubuntu. Просто оболочка другая.</p>
<p>Вот простая подсказка <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://tehnot.com/kak-ustanovit-ubuntu-parallelno-s-windows-10/" rel="noopener noreferrer" target="_blank">как установить Ubuntu параллельно Windows 10</a>. Сразу обращаю ваше внимание на то, что и Windows должна быть установлена в UEFI режиме с разметкой диска <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">GPT</code> и Ubuntu должна быть записана на флешку с соответствующими параметрами. Рекомендую писать образ на флешку программой <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://rufus.akeo.ie/?locale=ru_RU" rel="noopener noreferrer" target="_blank">rufus</a>.</p>
<p>Любые вопросы по операционным системам можно задать в нашем <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://t.me/hexletcommunity" rel="noopener noreferrer" target="_blank">телеграм-чате</a></p>
</li>
<li>
<p>Или <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://cygwin.com/install.html" rel="noopener noreferrer" target="_blank">Cygwin</a> - UNIX-подобная среда и интерфейс командной строки для <strong>Microsoft Windows</strong>. Многие пользуются именно этой программой, при разработке под ОС Windows.</p>
<p>Потребует много внимания к пакетам на этапе установки. Сразу для удобства, после установки, включите "понимание звездочек" командой <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">shopt -s globstar</code>.
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Cygwin</code> создает свою домашнюю папку где-то на системном диске и там уже обитает пользователь. То есть <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Cygwin</code> не пользуется стандартными домашними директориями Windows, но может по ним перемещаться.</p>
</li>
<li>
<p>Или просто сразу установите <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://git-scm.com/download/win" rel="noopener noreferrer" target="_blank">систему контроля версий Git</a> — все равно понадобится. В ее составе идет git-BASH (MINGW64). Под капотом работает такой же эмулятор как и в Cygwin — mintty. Ведет себя как unix-like терминал и вызывается из любой директории в системе — очень удобно. Для очень начальной разработки на java под ОС Windows — хватит с головой!</p>
<p>В процессе установки в меню компонентов в пункте <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Windows Explorer integration</code> ставим галочку напротив подпункта <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Git Bash Here</code>. Удобно запускается из любой папки в контекстном мено по ПКМышки. А во избежание использования визуального интерфейса гита - убираем галочку со словами <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Git GUI</code>. Git-BASH хорошо интегрирован с файловой системой <strong>Windows</strong>. Не создает своих файловых систем и домашних папок как <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Cygwin</code>, а просто пользуется структурой директорий Windows. Но этот интерфейс очень урезан, по сравнению с терминалом линукса и не имеет такого пакетного менеджера как <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">apt-get</code> или такого простого управления пакетами как в <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Cygwin</code>. Но позволит выполнять простейшие команды, создавать элиасы, компилировать и запускать программы. Для начала - "самое оно"!</p>
</li>
</ol>
<blockquote>
<p><em>Все, приведенные выше, варианты выбора ОС для разработки не являются <strong>строгими</strong> рекомендациями. Экспериментируйте, комбинируйте.</em>
<em>Например, можно установить Git в Windows и на нем познавать секреты BASH, а можно использовать CMD или PowerShell, просто подправляя некоторые команды под ОС Windows. Для обучения — этого хватит!</em>
<em>И опять "НО", помните: 96++ процентов серверов работают на Unix-like системах — целые программные экосистемы выращены для/вокруг этих ОС. И ваши программы так или иначе будут касаться их. И про Android не забывайте — это тоже Unix-like система.</em></p>
</blockquote>
<h2 id="heading-2-2">Родной терминал и менеджер пакетов в Windows</h2>
<p>В Windows есть терминал, в котором можно открывать несколько вкладок с CMD, PowerShell или даже Azure Cloud Shell. Устанавливается из магазина. Называется Windows Terminal. Он будет удобен для тех, кто использует Ubuntu внутри Windows.</p>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.microsoft.com/ru-ru/windows/terminal/" rel="noopener noreferrer" target="_blank">Вот документация</a> на это приложение.</p>
<p>Пакетный менеджер называется <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">winget</code> (Windows Package Manager Client). На 20.05.2020 его можно получить только по программе предварительной оценки Windows. <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://github.com/microsoft/winget-cli" rel="noopener noreferrer" target="_blank">Вот ссылка на репозиторий</a>. Там есть инструкция по установке.</p>
<h2 id="heading-2-3">Java Development Kit</h2>
<p>Для компиляции программ нам понадобится комплект для разработчика JDK. Который, кстати, включает в себя и обычную JRE.</p>
<p>На данный момент существует две основных ветки JDK:</p>
<ol>
<li>OracleJDK — проприетарная ветка с закрытым кодом и различными патентами и ограниченными правами на использование.</li>
<li>OpenJDK — это ветка с открытым исходным кодом.</li>
</ol>
<h3 id="heading-3-4">Качаем и устанавливаем JDK</h3>
<p>Для начала нужно определится с веткой JDK и версией. Версию рекомендую ставить восьмую, т.к. курс построен на ней. А выбор ветки, на данный момент, лучше делать основываясь на удобстве использования конкретно в вашем случае. Например у меня, в Windows стоит OracleJDK, а в Ubuntu OpenJDK.</p>
<p>Очень удобно устанавливать и управлять различными средствами разработки с помощью <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://sdkman.io/install" rel="noopener noreferrer" target="_blank">SDKMAN!</a>. SDKMAN! даже позволяет назначать свою JDK для отдельной папки/проекта.</p>
<p>Если хотите вручную скачать и установить:</p>
<ol>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.oracle.com/java/technologies/downloads/" rel="noopener noreferrer" target="_blank">Общая страница выбора OracleJDK</a> - Тут Вы можете выбрать любую необходимую версию OracleJDK. Загрузка более старых версий OracleJDK доступна только после регистрации в системе Oracle. Еще более древние релизы OracleJDK доступны по пункту <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Java Archive</code> в самом низу страницы загрузки.</li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://jdk.java.net/" rel="noopener noreferrer" target="_blank">OpenJDK на сайте проекта</a>.</li>
</ol>
<p>Необходимо скачать подходящую версию JDK именно под вашу операционную систему.</p>
<p>В Windows необходимо обязательно скачать и запустить, соответственно, исполняемый файл. <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://youtu.be/EEqScHr_bec" rel="noopener noreferrer" target="_blank">Как установить JDK</a> - видео инструкция установки JDK на Windows 10.</p>
<p>Управление версиями JDK проще осуществлять:</p>
<ul>
<li>в Ubuntu с помощью команды <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">update-java-alternatives</code> или SDKMAN!.</li>
<li>в Windows с помощью изменения переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">JAVA_HOME</code> в переменных среды окружения (об этом ниже) или SDKMAN!. Можно, конечно, еще использовать пакетный менеджер <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://pyatilistnik.org/choco-repository-fast-software-update/" rel="noopener noreferrer" target="_blank">CHOCO</a>. Но мне кажется, что проще поменять одну переменную среды окружения, для переключения разных версий JDK в системе.</li>
</ul>
<h3 id="heading-3-5">Переменные среды окружения</h3>
<p>Это переменные, в которых, в частности, указаны пути к исполняемым файлам в операционной системе.</p>
<p><code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">BASH: javac command not found</code> — говорит о том, что в системе не установлен JDK или неправильно прописаны переменные среды. Система просто не видит исполняемые файлы java. Такое часто бывает на Windows. Повторяю: JRE входит в состав JDK! Но не наоборот.</p>
<p>Рекомендую создать переменную среды <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">JAVA_HOME</code>, которая будет содержать путь к папке с конкретной версией JDK, а в переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">PATH</code> к <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">JAVA_HOME</code> добавить уже <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">/bin</code> (<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">\bin</code> - для windows). Это позволит подменять версию JDK во всей системе простым изменением пути к нужному JDK в переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">JAVA_HOME</code>. Для того чтобы эти изменения подхватывались в терминале, нужно перезапустить его, чтобы он заново прочитал переменные среды окружения. Естественно, после сохранения изменений в переменных среды окружения.</p>
<p>В Windows нужно еще, ко всему, удалить строку пути к java в переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Path</code> в окошке <strong>системные переменные</strong> (нижнее). Чтобы не было разночтений путей к java. Иначе возникнет ситуация, когда код компилируется, скажем, под java13, а запустить Вы его пытаетесь на java8 и тому подобное.</p>
<p>То есть, в любой системе, должна быть одна переменная <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">JAVA_HOME</code> и одно ее упоминание в переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Path</code> с постфиксом <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">/bin</code>. Любые другие ссылки на java нужно убрать, аккуратно, из переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Path</code>.</p>
<h2 id="heading-2-6">Про IDEA</h2>
<p>В начале обучения IntelliJ IDEA <strong>не будет</strong> часто нужна — все в терминале будем понимать. Но изучать эту среду разработки постепенно уже нужно.</p>
<p>Для обучения работе с IDEA стоит применить плагин <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">IDEA Features Trainer</code> — требует установки в самой IDEA в настройках. <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Settings -> Plugins -> Browse Repositories</code> ищем там. После установки этого плагина — в IDEA появится желтенький значок <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Learn Intellij IDEA</code>.</p>
<p>Обращаю ваше внимание на то, что отдельные <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">*.java</code> файлы или малое их количество проще компилировать и запускать из консоли. Это не только проще чем в разухабистой IDEA, но и позволит Вам вникнуть в то, как работает система команд в терминале. Каждая ошибочка или необходимость разухабистой команды в терминале — заставляет лучше вникнуть в тонкости экосистемы языка.</p>
<ul>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.jetbrains.com/idea/?gclid=CMyLmt376L8CFaKD2wodkpMAxA" rel="noopener noreferrer" target="_blank">Intellij IDEA</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.jetbrains.com/idea/help/keyboard-shortcuts-you-cannot-miss.html" rel="noopener noreferrer" target="_blank">Быстрые клавиши для Intellij IDEA</a></li>
</ul>
<p>После детальной настройки под себя — не забудьте импортировать эти настройки ;) <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">File —> Import Settings...</code>
Это позволит восстанавливать настройки, после чрезмерных экспериментов с ними.</p>
<h2 id="heading-2-7">Про sublime</h2>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.sublimetext.com" rel="noopener noreferrer" target="_blank">Сайт Sublime Text</a>.</p>
<p>Очень рекомендую для простых задач на пару файлов. По сравнению с IDEA сильно легковеснее. Но тоже дает возможность работать с разухабистыми проектами. Также sublime имеет свою базу плагинов <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Preferences —> Package Control</code>.</p>
<p>Для вызова sublime из терминала или для определения его как редактора по умолчанию, например, для Git или еще какого приложения — используйте файл с именем <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">subl</code>. И для того чтобы не ловить <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">"subl" - command not found</code> — пропишите путь к нему, в переменной <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Path</code> в переменных среды окружения.</p>
<p>Пример запуска из терминала: <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">subl README.md</code>.</p>
<p>К сожалению, sublime не имеет простого способа импорта/экспорта любимых настроек. Для этого нужны или какие-то плагины, или нужно переносить папки sublime из директории пользователя.</p>
<h2 id="heading-2-8">Базовые команды языка java в консоли</h2>
<ul>
<li><code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">javac</code> - команда, которая компилирует java-код в байт-код. Например из файла <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Main.java</code> в файл <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Main.class</code>. Может принимать на вход как один файл, так и перечень файлов. Файлы для компиляции необходимо указывать с расширением <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">*.java</code>.</li>
<li><code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">javap</code> - это дизассемблер, так сказать. Он показывает содержимое файлов <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">*.class</code>. Эта команда пригодится в одном из следующих курсов, а потом и в разработке, тестировании.</li>
<li><code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">java</code> - это команда, которая запускает байт-код в виртуальной машине java. Запускает на исполнение, например, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">Main.class</code> или <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">MyProgram.jar</code>. Вот эта команда и нужна для запуска скомпилированных файлов. На вход этой команде нужно подавать скомпилированный класс, но без расширения, только его имя. Например, так: <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">java Main</code>.</li>
</ul>
<p>Вам придется проявить внимательность и любознательность. Даже эти простейшие команды имеют свои особенности применения к файлам. Обязательно читайте <strong>обсуждения</strong> к каждому уроку и не стесняйтесь пользоваться поисковиком, задавать вопросы.</p>
<h2 id="heading-2-9">И еще чуть-чуть. :)</h2>
<p>Вам должно показаться, что в этом уроке слишком много информации по среде разработчика. Но уверяю — Вам еще предстоит многое узнать. А в этом уроке собрана базовая информация о настройке среды разработки, к которой Вы будете время-от-времени возвращаться в начале своего java-пути. И пока Вы в начале: экспериментируйте, совершайте ошибки.</p>
<p>Задавайте возникающие вопросы по теме в <strong>обсуждениях</strong> к уроку. Там же можно найти вопросы схожие с Вашим или идентичный.</p>
<p>Оформляйте свои вопросы в разметке <strong>Markdown</strong> или пользоваться соответствующими кнопками над полем ввода текста своего вопроса — это повысит читабельность Ваших сообщений. Так же, знание Markdown, пригодится в оформлении описания или документации на собственные проекты.
<a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://guides.hexlet.io/ru/markdown/" rel="noopener noreferrer" target="_blank">Markdown</a>, как говорит Википедия: "..облегченный язык разметки, созданный с целью написания наиболее читаемого и удобного для правки текста, но пригодного для преобразования в языки для продвинутых публикаций (HTML, Rich Text и других).".</p>
<p><strong>Markdown</strong> пригодится:</p>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">- для описания собственных проектов и документации в файлах `README.md`;
- для красивого и читабельного оформления своих вопросов тут на hexlet.io.</code>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/question-rules" rel="noopener noreferrer" target="_blank">Вот очень полезная статья</a>, которая поможет понять как лучше и точнее задавать вопросы по возникающим у Вас проблемам и задачам. Это статья пригодиться Вам не только в любом обучении, но и в любой работе. Потому что корректно сформулированный вопрос чаще приводит к корректному ответу ;)</p></div></div></div></div><style data-mantine-styles="inline">.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:8.333333333333334%;--col-max-width:8.333333333333334%;}@media(min-width: 48em){.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem" class="m_96bdd299 mantine-Grid-col __m__-_R_1bdub_"><div style="margin-inline:var(--mantine-spacing-xs)" class="mantine-visible-from-sm"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-lg);text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/java_101/lessons/java_dev_env_setup/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label"><span style="margin-inline-end:var(--mantine-spacing-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дальше</span>→</span></span></a><a style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Навигация по теме</span><span class="m_57492dcc mantine-NavLink-description">Теория</span></div><span class="m_690090b5 mantine-NavLink-section" data-position="right"></span></a><div style="margin-block:var(--mantine-spacing-lg)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div><div style="margin-block:var(--mantine-spacing-lg)" class=""><div style="justify-content:space-between;margin-bottom:calc(0.1875rem * var(--mantine-scale));color:var(--mantine-color-dimmed);font-size:var(--mantine-font-size-xs)" class="m_8bffd616 mantine-Flex-root __m__-_R_qimrbdub_"><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Завершено</p><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">0 / 38</p></div><div style="--progress-size:var(--progress-size-sm)" class="m_db6d6462 mantine-Progress-root" data-size="sm"><div style="--progress-section-size:0%;--progress-section-color:var(--mantine-color-gray-filled)" class="m_2242eb65 mantine-Progress-section" role="progressbar" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" aria-valuetext="0%"></div></div></div><button style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root" type="button"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Обсуждения (архив)</span><span class="m_57492dcc mantine-NavLink-description"></span></div></button><div style="--toc-bg:var(--mantine-color-blue-light);--toc-color:var(--mantine-color-blue-light-color);--toc-size:var(--mantine-font-size-sm);--toc-radius:var(--mantine-radius-sm);margin-top:var(--mantine-spacing-xl)" class="m_bcaa9990 mantine-TableOfContents-root" data-variant="light" data-size="sm"></div></div><div class="mantine-hidden-from-sm"><div style="--stack-gap:0rem;--stack-align:stretch;--stack-justify:flex-start" class="m_6d731127 mantine-Stack-root"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-xs);padding:0rem;text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/java_101/lessons/java_dev_env_setup/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">→</span></span></a><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" data-disabled="true" type="button" disabled=""><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></span></button><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto mantine-active m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" type="button"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></span></button></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-CdBlNCiQ.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-nkZBEvfU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>