How to Execute and Run Java Code from the Terminal
Md. Fahim Bin Amin
If you work with Java, you’ve probably used one of the well known text editors like Sublime Text, VS Code, Brackets, Atom, and Notepad++ as well as IDEs like Apache NetBeans and IntelliJ IDEA.
Running code in your IDE is straightforward, but you don’t often get to see how it executes your code (even though you can check the command in the terminal of course!).
However, it is good practice to know how your code actually executes and provides the output it gives you.
Many of you might have heard that experienced professional programmers also use the terminal to execute the programs. This gives them better clarity and helps them understand how the code is working, where it is returning the desired value, where the bug might be, and so on.
Whatever your purpose may be, executing Java code directly from the terminal is a very easy task.
In this article, I will show you how you can execute Java directly from your favorite terminal window. Fear not! The procedure is quite easy, and after reading the entire article you should be able to run your own Java code in the terminal.
How to Run Java Code in the Terminal
The process I am going to show you in this article is applicable to any operating system whether that is Windows, MacOS, or Linux.
I will be using the following Java code in the next step.
Step 1 – Go to the directory where your source code is
If you have already written your Java code in an editor, then simply go into that directory. You can go straight into the directory through your file manager if you want.
How to go into the directory where the source code is: for Windows
Suppose I have the source code ( Main.java ) inside This PC > Documents folder. I can simply go there through my file explorer.
Or, if I want, I can also go there using my terminal. I need to use cd to indicate that I want to change directory.
In this case, I can use cd «C:\Users\Md. Fahim Bin Amin\Documents» . As my user name contains white spaces, I have used » » to enclose them.
Then if I check all the files under that directory, then I will get the Main.java file as well.
I placed the Main.java file under my D drive this time. So I went in that directory using the cd command.
I get my Java file in the terminal as well.
How to go into the directory where the source code is: for Linux
You can go into the directory where you have kept your source code either by following the typical GUI way or from the terminal using the cd command as well.
using the typical GUI way
Using the cd command
How to Compile the Java Code
Before running our Java code, we need to compile it first. To compile a Java code/program, we get the class file. Then we need to execute/run the class file.
How to compile Java code using the terminal
We need to use the command javac file_name_with_the_extension . For example, as I want to compile my Main.java , I will use the command javac Main.java . The c in javac indicates compile.
If the compilation process is successful, then we will not get any errors.
This will create the class file we need under the same directory.
Keep in mind that we run the class file, not the .java file.
The same process is applicable for all of the operating systems out there.
in Linux OS
️ How to Run the Java Code
We run the .class file to execute the Java programs. For that, we use the command java class_file_name_without_the_extension . Like, as our .class file for this is Main.class , our command will be java Main .
The Java program has been executed successfully!
The exact same procedure is also applicable for the other operating systems as well.
in Linux OS
Bonus: How to Run a Java Program with Packages
A package basically means a folder. Earlier, I showed you how to use any regular Java code using the terminal. There, I did not use any packages inside the Java code.
Now I will show you how you can run any Java code that has packages declared within it. This time, I will be using the following Java code.
In the first line, I have written the package as package myJavaProgram.Source . This indicates that I want to create a folder named myJavaProgram . Then, I want to create another folder under that named Source . Finally, I want to create the class file of my Java code inside the Source folder.
The directory tree looks like this: myJavaProgram > Source.
For compiling this type of Java code with the packages, we use the command javac -d . file_name_with_the_extension .
As for now, I am using the Main.java file, so I will apply the command javac -d . Main.java . This will create a folder named myJavaProgram, then create another folder named Source under the myJavaProgram folder under the directory where my source file is now.
- The_Directory_Where_I_Have_Kept_My_Source_Code
- myJavaProgram folder
- Source folder
It instantly creates the myJavaProgram folder.
Within the folder, it creates the Source folder.
Inside the Source folder, it creates our .class file. We need this file to run the Java program.
Now if we want to run the .class file, then we need to change the command a little, as we need to provide the directory of the .class file in the terminal window.
We use the command to run the Java program with packages, java directory_of_the_class_file.the_class_file_name_without_the_extension .
As I am using Main.java and I need to run the Main.class file, my command will be java myJavaProgram.Source.Main . It will run the Java code like below.
If you’re wondering why we are changing the command now, it’s because earlier, we did not declare any packages. So the Java compiler created the .class file within the directory where our source code was. So, we could get the .class file directly from there and execute the class file as well.
But if we declare packages inside the source code like this, then we are telling the compiler to create the .class file in another place (not within the directory where our source code currently is). This means that we do not get the class file directly there.
As we want to run the class file, we need to tell the compiler explicitly where the class file currently is so that it can get the class file and execute it.
If you think that you might mess up this step, then you can copy the directory directly from your Java code.
In line 1, we have declared the package directory (where we want the class file to be generated). So if we simply copy the directory and add the .class file name without the extension ( .class ) later with a period ( . ), then it satisfies the condition for executing any Java code that has packages declared in the source code.
The same process is also applicable for the other operating systems as well. I am providing screenshots from a Linux OS here:
Running Java codes having packages within a Linux Machine
Great job! You can now run any Java code/programs directly using a terminal.
I have also created a video where I have shown all the processes mentioned above. You can check that out here.
♂️ Conclusion
I hope this article helps you run your Java programs just using the terminal.
➡️ If you want to know how to install a Java compiler for your Windows operating system, then you can check out this article.
➡️ If you want to know how to install C and C++ compilers for your Windows operating system, then you can check out this article.
➡️ If you want to know how to install Python on your Windows OS, then you can check out this article.
Thanks for reading the entire article. If it helps you then you can also check out other articles of mine at freeCodeCamp.
If you want to get in touch with me, then you can do so using Twitter, LinkedIn, and GitHub.
You can also SUBSCRIBE to my YouTube channel (Code With FahimFBA) if you want to learn various kinds of programming languages with a lot of practical examples regularly.
If you want to check out my highlights, then you can do so at my Polywork timeline.
You can also visit my website to learn more about me and what I’m working on.
How to Run a Simple Java Application From the Command Prompt on Windows
How to start developing Java applications on Windows?
To run Java applications from the command line on Windows, JDK must be installed on your machine. This process is described here.
After installation process, you can write simple Java code like below.
- For that, you should create a HelloWorld.java file on your disk.
- You can open this file with Notepad++. After opened it, write the following code in your file.
3. Open the command prompt with writing Windows Search Box Command Prompt.
4. Use the cd command to change your working directory to the directory containing your Java program.
Работа с Java в командной строке
Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.От простого к .
Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.
Один файл
Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.
Переходим в каталог, где лежит данный файл, и выполняем команды.
В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запуститьОтделяем бинарные файлы от исходников
Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем
Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.Используем пакеты
А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.
Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем
В каталоге bin автоматически создастся структура каталогов как и в src.Если в программе несколько файлов
HelloWorld.java
Adder.java
Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
КомпилируемЕсли удивляет результат
Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе CalculatorЗапускаем на выполнение.
Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.
Узнаем, что из себя представляет переменная а.
Выполним код в текущей строке и увидим, что sum стала равняться 2.
Поднимемся из класса Adder в вызвавший его класс Calculator.
Удаляем точку прерывания
Можно избежать захода в методы, используя команду next.
Проверяем значение выражения и завершаем выполнение.
Хорошо бы протестировать
Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ‘;’, в Linux — ‘:’. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ‘;’, но он воспринимается как разделитель команд.
Создадим библиотеку
Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.
Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку
Делаем архив jar
С помощью ключа -C мы запустили программу в каталоге bin.
Надо узнать, что у библиотеки внутри
Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).Лучше снабдить библиотеку документацией
Изменим для этого класс калькулятора.
Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.
В результате получиться следующее
Можно подписать jar-архив
Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.Генерируем Certificate Signing Request (CSR)
Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище
Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так
Использование библиотеки
Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
КомпилируемСобираем программу
Это можно сделать по-разному.
Первый способ
Здесь есть тонкости.
В строкене должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».При использовании команды echo надо следить только за пробелом в конце строки с main-class.
Второй способ
В данном способе избегаем ошибки с пробелом в main-class.
Третий способ
Включили код нужной библиотеки в исполняемый файл.
Запуск исполняемого jar-файла
Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.
Как быть с приложениями JavaEE
Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее
Структура архива JavaEE-приложения должна соответствовать определенному формату. Например
Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.
Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».
Как запустить джава файл через командную строку
Итак, после установки JDK создадим первое приложение на языке Java. Что необходимо для создания программы на Java? Прежде всего нам надо написать код программы, и для этого нужен текстовый редактор. Можно использовать любой текстовый редактор, например, Notepad++.
И чтобы превратить код программы в исполняемое приложение необходим компилятор. После установки JDK все файлы по умолчанию помещаются в каталог C:\Program Files\Java\jdk-[номер_версии] (при использовании ОС Windows). В моем случае это каталог C:\Program Files\Java\jdk-19 . Если мы откроем в нем подкаталог bin , то мы сможем увидеть в нем ряд утилит. Нас прежде всего интересует утилита компилятора javac . Чтобы скомпилировать класс программы, нам надо передать ее код этому компилятору.
Также следует отметить другую утилиту из этой папки — java.exe, которая позволяет запускать скомпилированную программу.
Итак, создадим на жестком диске какой-нибудь каталог, в котором будут располагаться файлы с исходным кодом на языке Java. Допустим, это будет каталог C:/Java . Затем создадим в этом каталоге текстовый файл, который переименуем в Program.java . Откроем этот файл в любом текстовом редакторе и наберем в нем следующую программу:
Java является объектно-ориентированным языком, поэтому вся программа представляется в виде набора взаимодействующих классов. В данном случае определен один класс Program.
При определении класса вначале идет модификатор доступа public , который указывает, что данный класс будет доступен всем, то есть мы сможем его запустить из командной строки. Далее идет ключевое слово class , а затем название класса. То есть класс называется Program. После названия в фигурных скобках расположено содержимое класса.
Класс может содержать различные переменные и методы. В данном случае у нас объявлен один метод main . Это главный метод в любой программе на Java, он является входной точкой программы и с него начинается все управление. Он обязательно должен присутствовать в программе.
Метод main также имеет модификатор public . Слово static указывает, что метод main — статический, а слово void — что он не возвращает никакого значения. Позже мы подробнее разберем, что все это значит.
Далее в скобках у нас идут параметры метода — String args[] — это массив args, который хранит значения типа String , то есть строки. В данном случае ни нам пока не нужны, но в реальной программе это те строковые параметры, которые передаются при запуске программы из командной строки.
После списка параметров в фигурных скобках идет тело метода — это собственно те инструкции, которые и будет выполнять метод. В данном случае фактически определени определена только одна инструкция — вывод на консоль некоторой строки. Для вывода на консоль используется встроенный метод System.out.println() . В этот метод передается выводимая строка. Каждая инструкция завершается точкой с запятой.
Теперь скомпилируем написанную программу. Откроем командную строку (в Windows) или терминал в Linux/MacOS и введем там соответствующие команды. Первым делом перейдем в каталог, где лежит наш файл с программой с помощью команды:
В данном случае файл находится в каталоге C:\Java.
Затем cкомпилируем программу с помощью команды
Обратите внимание, что весь путь к компилятору javac берется в кавычки, а затем через пробел идет название нашего файла, который содержит класс программы.
После этого программа компилируется в байт-код, и в каталоге C:\Java можно будет найти новый файл Program.class . Это и будет файл с байт-кодом программы. Теперь нам надо его запустить с помощью утилиты java:
Здесь уже расширение у файла не надо использовать.
Для ОС Windows весь процесс будет выглядеть следующим образом:
Добавление java в переменную Path
Для компиляции приходится вводить полный путь к комилятору javac, что может быть сопряжено с ошибками при вводе, да и каждый раз вводить полный путь тоже неудобно. Чтобы в дальнейшем облегчить работу, добавим путь к JDK в переменную PATH в переменных среды. Если мы работаем в Windows, то для добавления переменной среды через поиск найдем найдем параметр Изменение системных переменных среды . Для этого введем в поле поиска «Изменение системных переменных среды»:
Выберем пункт Изменение системных переменных среды . И сначала нам откроется окно «Свойства системы», где нажмем на кнопку Переменные среды :
Затем нам откроется окно, где мы можем увидеть все переменные среды. (Также можно перейти через Параметры и пункт Система ->Дополнительные параметры системы ->Переменные среды )
Здесь нам нужно исправить системную переменную Path . Для этого выделим ее и нажмем на кнопку «Изменить»:
В эту переменную Path нам надо добавить путь к инструментам JDK. И тут есть два момента. Во-первых, при установке jdk по умолчанию ряд утилит также устанавливаются в папку C:\Program Files\Common Files\Oracle\Java\javapath . В том числе это такие файлы как java.exe и javac.exe. И путь к этой папке по умолчанию добавляется в перемнную Path. То есть мы можем использовать этот путь.
Второй момент — в последних сборках Windows компания Microsoft также устанавливает свои сборки JDK, точнее OpenJDK, которые также по умолчанию добавляются в переменную Path и которые мы также можем использовать. Но у этих сборок есть большой минус — они применяют одну из прошлых версий JDK (обычно это LTS-сборки). Например, в моем случае это 11-я версия, но текущая версия может отличаться (например, на написание данной статьи текущей являлась версия 19).
Чтобы использовать последнюю версию среди путей в переменной Path убедимся, что путь C:\Program Files\Common Files\Oracle\Java\javapath располагается выше путей к сборкам JDK от Microsoft. Для перемещения определенного пути вверх среди переменных среды можно использовать кнопку «Вверх:
Также можно напрямую использовать путь к JDK.
Для создания новой переменной надо нажать на кнопку «Создать» и ввести в новое поле путь «C:\Program Files\Java\jdk-[номер_версии]\bin». Но опять же его следуется с помощью кнопки Вверх поместить над путями к OpenJDK от Microsoft.
После установки переменной Path перейдем к командной строке/терминалу (в более старых версиях Windows может потребоваться перезауск командной строки) и для проверки версии введем команду
Консоль нам должна в ответ ввести номер только что установленной версии JDK (в моем случае 19-й версии):
- myJavaProgram folder