В современном мире большинство программистов используют интегрированные среды разработки (IDE), которые предоставляют широкий набор функций и инструментов для создания, отладки и тестирования кода. Однако, не все разработчики умеют работать с терминалом, который также является важным инструментом для запуска и тестирования кода. В данной статье мы поговорим о том, как установить Java, попытаемся найти разницу между OpenJDK и OracleJDK, научимся компилировать, собирать jar-файлы, писать самостоятельно MANIFEST.mf и дебажить свой код в терминале.
Установка Java. Разница между OpenJDK и OracleJDK
Как установить Java? Очень просто, заходим в браузер и пишем: "Скачать Java [ваша операционная система]", и вам высыпаются тысячи страниц с подробными инструкциями. Только помните, что вам для разработки нужен именно JDK, а не JRE! Другое дело - это выбрать между OpenJDK и OracleJDK. В чем же разница? Такой ответ дает ChatGPT:
OracleJDK и OpenJDK - это две различные реализации Java Development Kit (JDK), которые предоставляются разными компаниями. OracleJDK разрабатывается и поддерживается компанией Oracle, а OpenJDK - открытым сообществом разработчиков.
Основная разница между OracleJDK и OpenJDK заключается в лицензировании и поддержке. OracleJDK имеет коммерческую лицензию и предоставляет дополнительную поддержку и инструменты для разработки, такие как JavaFX и Java Mission Control. OpenJDK, с другой стороны, является бесплатным и открытым для использования и распространения, но не предоставляет коммерческой поддержки.
Однако, в последние годы Oracle перестала предоставлять бесплатные обновления OracleJDK для коммерческого использования. Вместо этого они рекомендуют использовать OpenJDK или покупать коммерческую поддержку для OracleJDK.
В целом, выбор между OracleJDK и OpenJDK зависит от ваших потребностей и бюджета. Если вам нужны дополнительные инструменты и поддержка, то OracleJDK может быть лучшим выбором. Если вы ищете бесплатную и открытую реализацию, то OpenJDK будет подходящим вариантом.
Каждый должен сделать свой выбор! Например, я установил OpenJDK, так как это было гораздо проще, чем установить OracleJDK.
Как проверить, что Java теперь есть в вашем компьютере?
Просто напишите в терминале:
java -version

Если вы получили что-то похожее, то поздравляю! Вы теперь имеете Java на своем компьютере!
Первая программа на Java
Давайте напишем "классическую первую" программу!
public class Hello
{
public static void main(String[] args)
{
System.out.println("Да здравствует, Король Джулиан!");
}
}
Напишите этот код в любом текстовом редакторе и сохраните под названием Hello.java. Если вы назовете файл по-другому, то код у вас не скомпилируется, так как в первой строчке мы указали, что class у нас носит имя Hello. Вторая строка создает классический для C-подобных языков main класс. Не спрашивайте почему, просто так принято :D. А в третьей строке мы просим язык вывести строку "Да здравствует, Король Джулиан!" Синтаксис Java не является ключевой темой данной статьи, поэтому простите за сжатый рассказ о том, что делает данный код.
Компиляция в терминале
После создания Hello.java перейдем в терминал. Важно перейти в каталог, где лежит этот файл. Для того чтобы скомпилировать файл, нужно написать в терминале:
javac Hello.java
После выполнения этой команды в каталоге, где был файл, создаться новый файл Hello.class

Теперь можно запустить нашу программу. Достаточно написать в терминале:
java Hello

К компиляции мы еще вернемся. Но сначала изучим, как собирать jar-файл.
Как собрать jar-файл?
Что такое Jar-файл?
Jar-файл (Java Archive) - это архивный файл, который содержит один или несколько файлов Java-кода, библиотек и других ресурсов, необходимых для выполнения приложения на платформе Java.
Что необходимо для сборки jar-файла? Чтобы собрать jar, вам нужен файл.class и MANIFEST.mf. MANIFEST.mf - это файл, который содержит метаданные для создания jar-файла. Давайте создадим файл MANIFEST.mf в каталоге, где уже лежат два файла: Hello.java, Hello.class. Для того чтобы создать MANIFEST.mf, нужно зайти в текстовый редактор и написать следующие строки.
Manifest-Version: 1.0
Created-By: [указываем номер версии Java]
Main-Class: Hello
В первой строке указываем версию создаваемого файла. По стандарту пишут (1.0)
Во второй строке указываем версию Java. Напишите в терминале java -version и перепишите цифры.
В третьей строке указываем главный класс. Так как у нас программа состоит из одного файла, то указываем Hello, в противном же случае нужно было бы сделать осознанный выбор.
Теперь сохраняем данный файл под названием MANIFEST.mf в каталоге, где лежат наши 2 файла. У нас всё готово для сборки jar-файла! Осталось только перейти в терминал и написать:
jar -cfm Hello.jar MANIFEST.mf Hello.class
Если перейдем в каталог, то увидим, что у нас создался файл Hello.jar, можно было назвать Hello.jar по-другому, здесь имя значения не имеет, главное чтобы файл заканчивался на .jar. Чтобы запустить jar-файл, нужно в консоли написать:
java -jar Hello.jar
Хитрая компиляция
Команда javac имеет много возможностей. Например, чтобы скомпилированный файл сохранить в другой директории достаточно написать при компиляции:
javac Hello.java -d [путь до каталога]
Можно посмотреть процессы, которые происходят во время компиляции, с помощью этой команды:
javac Hello.java -verbose
Существует еще много возможностей. Для подробного изучения напишите в терминале:
man javac
Дебаггинг в терминале
Для того чтобы заниматься таким странным делом в терминале, нужно скомпилировать наш файл с определенным параметром:
javac Hello.java -g
После этого запускаем отладчик jdb (Далее комментарии будут в скобках в коде):
jdb Hello
Initializing jdb ...
(Нужно установить стоп-точку)
> stop at Hello:5
Deferring breakpoint Hello:5.
It will be set after the class is loaded.
(Перейдем к стоп-точке с помощью команды run)
> run
run Hello
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint Hello:5
Breakpoint hit: "thread=main", Hello.main(), line=5 bci=0
5 System.out.println("Да здравствует, Король Джулиан!");
(Если у нас были бы переменные, то их значения можно было прочитать с помощью команды print [имя переменной])
main[1] (Например: print a)
(Посмотреть отрывок кода можно с помощью команды list)
main[1] list
1 public class Hello
2 {
3 public static void main(String[] args)
4 {
5 => System.out.println("Да здравствует, Король Джулиан!");
6 }
7 }
(Для того чтобы продолжить выполнение программы, можно воспользоваться командой cont)
main[1] cont
> Да здравствует, Король Джулиан!
The application exited
Таким образом, можно дебажить ваш код. Конечно, лучше и проще заниматься дебаггингом в IDE, но если что, теперь вы знаете, как это делать в терминале.