To run Java class file from the command line, the syntax is:
java -classpath /path/to/jars <packageName>.<MainClassName>
where packageName (usually starts with either com
or org
) is the folder name where your class file is present.
For example if your main class name is App and Java package name of your app is com.foo.app
, then your class file needs to be in com/foo/app
folder (separate folder for each dot), so you run your app as:
$ java com.foo.app.App
Note: $
is indicating shell prompt, ignore it when typing
If your class doesn’t have any package
name defined, simply run as: java App
.
If you’ve any other jar dependencies, make sure you specified your classpath parameter either with -cp
/-classpath
or using CLASSPATH
variable which points to the folder with your jar/war/ear/zip/class files. So on Linux you can prefix the command with: CLASSPATH=/path/to/jars
, on Windows you need to add the folder into system variable. If not set, the user class path consists of the current directory (.
).
Practical example
Given we’ve created sample project using Maven as:
$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
and we’ve compiled our project by mvn compile
in our my-app/
dir, it’ll generate our class file is in target/classes/com/foo/app/App.class
.
To run it, we can either specify class path via -cp
or going to it directly, check examples below:
$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!
To double check your class and package name, you can use Java class file disassembler tool, e.g.:
$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
public com.foo.app.App();
public static void main(java.lang.String[]);
}
Note: javap
won’t work if the compiled file has been obfuscated.
I’m trying to run .class file from command line. It works when I manually move to the directory it’s stored in, but when I try something like this:
java C:PeterMichaelLazarusMain
it says it can’t find the main class. Is there any solution to this other than making a .jar file (I know that .jar is the best solution, but at this moment isn’t the one I’m looking for)?
kgiannakakis
102k27 gold badges160 silver badges194 bronze badges
asked May 19, 2010 at 10:27
0
The Java application launcher (a.k.a java.exe
or simply java
) supports up to four different ways to specify what to launch (depending on which Java version you use).
-
Specifying a class name is the most basic way. Note that the class name is different from the file name.
java -cp path/to/classFiles/ mypackage.Main
Here we start the class
mypackage.Main
and use the-cp
switch to specify the classpath which is used to find the class (the full path to the classmypackage.Main
will bepath/to/classFiles/mypackage/Main.class
. -
Starting a jar file.
java -jar myJar.jar
This puts the jar itself and anything specified on its
Class-Path
entry on the class path and starts the class indicated via theMain-Class
entry. Note that in this case you can not specify any additional class path entries (they will be silently ignored). -
Java 9 introduced modules and with that it introduce a way to launch a specific module in a way similar to how option #2 works (either by starting that modules dedicated main class or by starting a user-specified class within that module):
java --module my.module
-
Java 11 introduces support for Single-File Source Code Programs, which makes it very easy to execute Java programs that fit into a single source file. It even does the compile step for you:
java MyMain.java
This option can be useful for experimenting with Java for the first time, but quickly reaches its limits as it will not allow you to access classes that are defined in another source file (unless you compile them separately and put them on the classpath, which defeats the ease of use of this method and means you should probably switch back to option #1 in that case).
This feature was developed as JEP 330 and is still sometimes referred to as such.
For your specific case you’d use option #1 and tell java
where to look for that class by using the -classpath
option (or its short form -cp
):
java -classpath C:PeterMichaelLazarus Main
If your Main.java
contains the entirety of your source code (and it is in the same directory), then you can use option #4, skip the compile step and directly compile-and-execute it:
java c:PeterMichaelLazarusMain.java
answered May 19, 2010 at 10:28
Joachim SauerJoachim Sauer
298k57 gold badges552 silver badges611 bronze badges
1
Assuming that Main.class
does not have a package declaration:
java -cp C:PeterMichaelLazarus Main
Java looks for classes in a «classpath», which can be set on the command line via the -cp
option.
answered May 19, 2010 at 10:30
Michael BorgwardtMichael Borgwardt
340k77 gold badges477 silver badges713 bronze badges
I just had the same issue, I tried running java hello.class
, this is wrong.
The command should be java hello
.
Do not include the file extension. It is looking for a class file, and will add the name on its own.
So running ‘java hello.class
‘ will tell it to go looking for ‘hello.class.class
‘ file.
answered Oct 30, 2014 at 8:58
ArinomiArinomi
811 silver badge1 bronze badge
Try this:
java -cp C:PeterMichaelLazarus Main
You need to define the classpath.
answered May 19, 2010 at 10:29
kgiannakakiskgiannakakis
102k27 gold badges160 silver badges194 bronze badges
I’m trying to run .class file from command line. It works when I manually move to the directory it’s stored in, but when I try something like this:
java C:PeterMichaelLazarusMain
it says it can’t find the main class. Is there any solution to this other than making a .jar file (I know that .jar is the best solution, but at this moment isn’t the one I’m looking for)?
kgiannakakis
102k27 gold badges160 silver badges194 bronze badges
asked May 19, 2010 at 10:27
0
The Java application launcher (a.k.a java.exe
or simply java
) supports up to four different ways to specify what to launch (depending on which Java version you use).
-
Specifying a class name is the most basic way. Note that the class name is different from the file name.
java -cp path/to/classFiles/ mypackage.Main
Here we start the class
mypackage.Main
and use the-cp
switch to specify the classpath which is used to find the class (the full path to the classmypackage.Main
will bepath/to/classFiles/mypackage/Main.class
. -
Starting a jar file.
java -jar myJar.jar
This puts the jar itself and anything specified on its
Class-Path
entry on the class path and starts the class indicated via theMain-Class
entry. Note that in this case you can not specify any additional class path entries (they will be silently ignored). -
Java 9 introduced modules and with that it introduce a way to launch a specific module in a way similar to how option #2 works (either by starting that modules dedicated main class or by starting a user-specified class within that module):
java --module my.module
-
Java 11 introduces support for Single-File Source Code Programs, which makes it very easy to execute Java programs that fit into a single source file. It even does the compile step for you:
java MyMain.java
This option can be useful for experimenting with Java for the first time, but quickly reaches its limits as it will not allow you to access classes that are defined in another source file (unless you compile them separately and put them on the classpath, which defeats the ease of use of this method and means you should probably switch back to option #1 in that case).
This feature was developed as JEP 330 and is still sometimes referred to as such.
For your specific case you’d use option #1 and tell java
where to look for that class by using the -classpath
option (or its short form -cp
):
java -classpath C:PeterMichaelLazarus Main
If your Main.java
contains the entirety of your source code (and it is in the same directory), then you can use option #4, skip the compile step and directly compile-and-execute it:
java c:PeterMichaelLazarusMain.java
answered May 19, 2010 at 10:28
Joachim SauerJoachim Sauer
298k57 gold badges552 silver badges611 bronze badges
1
Assuming that Main.class
does not have a package declaration:
java -cp C:PeterMichaelLazarus Main
Java looks for classes in a «classpath», which can be set on the command line via the -cp
option.
answered May 19, 2010 at 10:30
Michael BorgwardtMichael Borgwardt
340k77 gold badges477 silver badges713 bronze badges
I just had the same issue, I tried running java hello.class
, this is wrong.
The command should be java hello
.
Do not include the file extension. It is looking for a class file, and will add the name on its own.
So running ‘java hello.class
‘ will tell it to go looking for ‘hello.class.class
‘ file.
answered Oct 30, 2014 at 8:58
ArinomiArinomi
811 silver badge1 bronze badge
Try this:
java -cp C:PeterMichaelLazarus Main
You need to define the classpath.
answered May 19, 2010 at 10:29
kgiannakakiskgiannakakis
102k27 gold badges160 silver badges194 bronze badges
- →
В прошлой публикации мы установили и настроили Sublime Text в качестве редактора для написания кода на Java.
Из этой статьи вы узнаете:
- о компиляции и запуске Java-программ из консоли
- как выводить в нее корректный русский текст
- способ отображения байт-кода
На первых порах начинающему программисту очень важно научиться выполнять необходимые действия минимальными средствами, чтобы:
- иметь представление, что происходит «под капотом»
- не быть зависимым от среды разработки
- не превратиться в специалиста по нажиманию кнопок в инструментах для профессионалов
- не оказаться беспомощным за их пределами
Вам сейчас нужно максимально набить шишек, находясь в спартанских условиях, которые закалят и научат самостоятельно и оперативно решать возникающие проблемы. Это придаст уверенности и повысит вашу экспертность.
Есть такое понятие — профессиональный кругозор. Он важен для людей любой профессии. Программисты — не исключение. Если человек хочет стать настоящим разработчиком, обладающим фундаментальными знаниями, а не поверхностными и неструктурированными, то ему нужно изучать возможности языка последовательно и системно. Компиляция и запуск — это основа основ, это база, мимо которой никак нельзя пройти.
Компилировать и запускать программы на первых порах мы будем из консоли. В этой и последующих статьях мы будем много работать с этим инструментом. Это важный навык, который используется программистами повсеместно.
Откроем в Sublime Text терминал, нажав Ctrl + Alt + T (при этом файл MyFirstApp.java должен быть открыт в редакторе). Обязательно проверьте, что терминал запустился в папке StartJava (или где вы сохранили класс).
Для компиляции воспользуемся уже знакомой утилитой javac (java compiler, компилятор java). Она нужна для преобразования Java-кода в язык виртуальной машины (байт-код).
В терминале пишем команду javac MyFirstApp.java:
Отсутствие каких-либо сообщений свидетельствует о том, что компилятор не нашел ошибок в нашем коде. Результатом его работы стал файл MyFirstApp.class.
На текущем этапе директория содержит два файла:
Как мы уже знаем, MyFirstApp.class содержит байт-код. Для его исполнения воспользуемся утилитой java. Именно она стартует JVM, которая, в свою очередь, запустит класс MyFirstApp.
Программа отработала верно, выведя в консоль WORA.
Обратите внимание, что необходимо указать не имя файла MyFirstApp.class, а имя класса. При этом писать какое-либо расширение не нужно. Утилита java принимает в качестве параметра именно имя класса, а не имя файла, где он находится.
Мы уже не первый раз упоминаем про байт-код, но до сих пор в глаза его не видели. Исправим эту ситуацию.
Для отображения (декомпиляции) байт-кода класса необходимо в консоли написать команду javap -c MyFirstApp:
Как правило, умение читать и понимать байт-код, вносить в него изменения для рядовых Java-разработчиков обычно не требуется — это очень специфические знания. Так что долго не сидите на этой теме.
Если обобщить все этапы, которые проходит программа перед запуском, то схематично их можно отобразить в виде схемы:
4. Запуск однофайловых программ
Чтобы посмотреть, как работает программа, необходимо выполнить два действия: компиляцию и запуск. Если эти шаги требуется исполнять часто, то данный процесс рано или поздно надоест. Хотелось бы его упростить.
Начиная с Java 11, однофайловые программы можно запускать не используя явно этап компиляции.
Удалите из папки class-файл, чтобы все было честно. И запустите программу без компиляции в явном виде, написав java MyFirstApp.java:
Мы только что запустили (и скомпилировали) файл с java-кодом без использования команды javac. При этом исходный код, в любом случае, компилируется в памяти (без создания на диске class-файла), а затем исполняется JVM.
Эта функция ограничена кодом, который хранится в одном файле. Она не сработает для программ, состоящих из двух и более файлов.
Теперь, когда вы умеете компилировать и запускать программу, можете поэкспериментировать с кодом MyFirstApp.java, внося в него изменения. Попробуем удалить точку с запятой.
Чтобы не писать заново ранее введенные команды, можно нажимать на клавиатуре стрелочку вверх ↑.
Компилятор сообщает о том, что в строке 3 пропущена точка с запятой.
Удалим слово static и снова запустим.
> java MyFirstApp.java
error: 'main' method is not declared 'public static'
Возникла новая ошибка, сообщающая, что метод main должен быть объявлен, как public static.
Самостоятельно попробуйте удалять разные части программы и смотреть, какие ошибки выдает компилятор.
6. Вывод кириллицы на консоль
Если вы используете Linux или macOS, то дальше можете не читать, т. к. ниже описаны проблемы и их решения для Windows. У вас таких проблем не будет!
Написанная нами программа выводит текст в консоли на английском языке. Как вы думаете, что произойдет, если попробовать вывести текст на русском?
Внесем исправления в код, написав: «Написано однажды, работает везде», и запустим…
> java MyFirstApp.java
Р?апиС?Р°Р?Р? Р?Р?Р?Р°Р?Р?С?, С?Р°Р?Р?С?Р°Р?С? Р?Р?Р·Р?Р?
Что-то пошло не так и вместо русского текста отобразились какие-то закорючки. В чем тут причина и как эту ситуацию можно исправить?
Первое, что приходит в голову — это какая-то проблема с кодировкой. Нужно разобраться, в какой момент она возникает.
Посмотрим, какая кодировка у файла с нашим кодом. Она отображается в правом нижнем углу окна. Видим, что это UTF-8.
А какая кодировка используется в OC? Определить это можно разными путями. Например, в Windows в реестре (для его запуска из консоли используйте команду regedit) по следующему адресу HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsCodePage можно посмотреть, чему равен параметр под названием ACP (ANSI code page).
У меня он имеет значение 1251. Это стандартная кодировка для русских версий Windows. У вас она может быть другой — все зависит от языка (кодировки) системы.
Есть еще один способ узнать кодировку, который подходит для любой ОС — это воспользоваться Java, поместив в наш класс две новых строки:
import java.nio.charset.Charset;
public class MyFirstApp {
public static void main(String[] args) {
System.out.println(Charset.defaultCharset().displayName());
}
}
Вникать в то, что означает этот код мы не будем — наша задача лишь получить универсальным способом значение кодировки. Но если в двух словах, то в первой строке мы подключаем класс Charset, а в пятой выводим на экран значение кодировки по умолчанию для ОС, воспользовавшись возможностями данного класса.
Запускаем и видим то же значение, что и в реестре.
> java MyFirstApp.java
windows-1251
Осталось узнать кодировку консоли. Для этого в ней напишем команду chcp.
> chcp
Текущая кодовая страница: 866
Она выдала 866. Это же число можно наблюдать и в реестре у параметра OEMCP (Original equipment manufacturer code page). Это DOS-кодировка, которая досталась нам в наследство.
Не удивительно, что Java не смогла корректно отобразить кириллический текст, когда используется столько кодировок в одной ОС.
Дело в том, что во время компиляции компилятор определяет кодировку исходного кода, опираясь на значение кодировки по умолчанию (на кодировку вашей ОС), а не на кодировку файла. В разных системах используются разные кодировки по умолчанию: в Windows — windows-1251, в Linux и Mac — UTF-8.
В Windows, ко всему прочему, еще и кодировка консоли не совпадает с кодировкой системы! Консоль по историческим причинам имеет кодировку Cp866 (видимо, в целях совместимости).
Затем JVM определяет кодировку по умолчанию во время запуска, используя системное свойство file.encoding. Значение для этого свойства устанавливается Java-машиной один раз при старте на основании данных, взятых из ОС.
Кодировка, используемая при выводе в консоль тоже системная, а не консоли. Если они не совпадают, то не видать нам корректного вывода кириллицы.
В итоге кодировку надо учитывать во время компиляции, во время запуска и во время вывода текста на консоль, например, при вводе с клавиатуры. Невыполнение этого правила в любом из этих мест способно вызвать проблемы.
Давайте исправлять ситуацию. Начнем с компиляции.
У компилятора есть опция -encoding. Она позволяет принудительно указать кодировку исходника, чтобы компилятор не определял ее, опираясь на кодировку системы. Как вы помните, файл имеет кодировку UTF-8. Вот ее мы и укажем: javac -encoding utf8 MyFirstApp.java.
Если для однофайловых программы вы решили не использовать явно компиляцию, а сразу писать java, то для переопределения системного свойства file.encoding существует специальная команда. Вместе с ней запуск программы будет выглядеть так:
> java -Dfile.encoding=UTF8 MyFirstApp.java
Написано однажды, работает везде
Консоль выведет корректный русский текст.
-Dfile.encoding — это уже параметр JVM, с помощью которого мы устанавливаем принудительно нужное нам значение, сохраняя его в file.encoding.
От всех этих параметров и правил может закружиться голова. И все эти годы Java-разработчики жили и мучились с кодировками и ошибками, которые они вызывали в программах.
Но не прошло и 25 лет, как появилась хорошая новость. Начиная с Java 18, значение кодировки по умолчанию определяется не исходя из кодировки ОС, а исходя из того, что она является UTF-8 — отныне это кодировка по умолчанию. Никакие параметры больше не нужны. Убедимся в этом:
> "C:Program FilesjavaSapMachine-18binjava.exe" MyFirstApp.java
Написано однажды, работает везде
> "C:Program FilesjavaSapMachine-18binjavac.exe" MyFirstApp.java
> "C:Program FilesjavaSapMachine-18binjava.exe" MyFirstApp
Написано однажды, работает везде
7. Переменная среды JAVA_TOOL_OPTIONS
Для тех, кто использует Java меньше 18, придется использовать все параметры, указанные ранее — ни куда от них не деться. Но и тут есть выход.
Утомительно все время указывать кодировку. Этот вопрос можно решить, используя JAVA_TOOL_OPTIONS со значением -Dfile.encoding=UTF8. Необходимо установить эту переменную и ее значение в качестве переменной среды (ранее мы уже имели дело с другой переменной — JAVA_HOME).
Благодаря этой переменной кодировка будет устанавливаться автоматически при каждом запуске JVM. При этом в консоли будет отображаться сообщение:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Пробуем скомпилировать и запустить с уже установленным JAVA_TOOL_OPTIONS:
> java MyFirstApp.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Написано однажды, работает везде
> javac MyFirstApp.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
> java MyFirstApp
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Написано однажды, работает везде
Забежим немного вперед и рассмотрим ситуацию, когда нам нужно ввести с клавиатуры что-то на русском языке. Да, ввод мы еще не проходили, но мне совсем не хочется размазывать эту информацию по разным статьям. Пусть все, что связано с компиляцией и запуском, с кодировками, их проблемы и решения будет в одном месте.
Добавим в наш код библиотечный класс Scanner, который позволит считывать, введенные с клавиатуры символы, и пару строк с его использованием:
import java.util.Scanner;
public class MyFirstApp {
public static void main(String[] args) {
System.out.println("Написано однажды, работает везде");
Scanner console = new Scanner(System.in);
System.out.print("Введите свое имя: ");
System.out.println(console.nextLine());
}
}
Запустив программу и введя с клавиатуры имя, видим, что консоль отобразит вместо текста ????:
> java MyFirstApp.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Написано однажды, работает везде
Введите свое имя: Максим
????
Это означает, что кодировка консоли и кодировка, которую использует Scanner, не совпадают.
Проблему можно решить, указав явно кодировку cp866 — это кодировка консоли, как вы помните:
замените
Scanner console = new Scanner(System.in);
на
Scanner console = new Scanner(System.in, "cp866");
Снова запустим программу:
> java MyFirstApp.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Написано однажды, работает везде
Введите свое имя: МАКСИМ ШШШШ ИИИИ
МАКСИМ ШШШШ ИИИИ
Как видим, текст отображается корректно.
Если после всего проделанного, что я описал выше, у вас вместо русского текста выводится пустая строка, то необходимо в консоли ввести chcp 866 и заново запустить программу.
В этой статье мы научились компилировать и запускать java-программы, нашли способ побороть проблему с выводом кириллических символов в консоль, а также лучше стали понимать, как работают все эти механизмы.
Если не использовать в коде программы или во время ввода с клавиатуры русский язык, то никаких проблем с кодировками не возникнет. Но, если вы все же ступили на путь использования кириллических символов, то вам придется проделать все те настройки, которые были описаны во второй половине статьи. Таких проблем в профессиональных средах разработки практически не бывает, т. к. они умеют правильно отображать текст в консоли, делая автоматически, если нужно, его перекодировку.
Оцените статью, если она вам понравилась!
Последнее обновление: 22.11.2022
Итак, после установки JDK создадим первое приложение на языке Java. Что необходимо для создания программы на Java? Прежде всего нам надо написать код программы, и для этого нужен текстовый редактор.
Можно использовать любой текстовый редактор, например, Notepad++.
И чтобы превратить код программы в исполняемое приложение необходим компилятор. После установки JDK все файлы по умолчанию помещаются в каталог C:Program FilesJavajdk-[номер_версии] (при использовании ОС Windows).
В моем случае это каталог C:Program FilesJavajdk-19. Если мы откроем в нем подкаталог bin, то мы сможем увидеть в нем ряд утилит.
Нас прежде всего интересует утилита компилятора javac. Чтобы скомпилировать класс программы, нам надо передать ее код этому компилятору.
Также следует отметить другую утилиту из этой папки — java.exe, которая позволяет запускать скомпилированную программу.
Итак, создадим на жестком диске какой-нибудь каталог, в котором будут располагаться файлы с исходным кодом на языке Java. Допустим, это будет каталог
C:/Java. Затем создадим в этом каталоге текстовый файл, который переименуем в Program.java.
Откроем этот файл в любом текстовом редакторе и наберем в нем следующую программу:
public class Program{ public static void main (String args[]){ System.out.println("Hello 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компилируем программу с помощью команды
C:Java>"C:Program FilesJavajdk-19binjavac" Program.java
Обратите внимание, что весь путь к компилятору javac берется в кавычки, а затем через пробел идет название нашего файла, который содержит
класс программы.
После этого программа компилируется в байт-код, и в каталоге C:Java можно будет найти новый файл Program.class.
Это и будет файл с байт-кодом программы. Теперь нам надо его запустить с помощью утилиты java:
C:Java>"C:Program FilesJavajdk-19binjava" Program
Здесь уже расширение у файла не надо использовать.
Для ОС Windows весь процесс будет выглядеть следующим образом:
Добавление java в переменную Path
Для компиляции приходится вводить полный путь к комилятору javac, что может быть сопряжено с ошибками при вводе, да и каждый раз вводить полный путь тоже неудобно.
Чтобы в дальнейшем облегчить работу, добавим путь к JDK в переменную PATH в переменных среды. Если мы работаем в Windows, то для добавления переменной среды
через поиск найдем найдем параметр Изменение системных переменных среды. Для этого введем в поле поиска «Изменение системных переменных среды»:
Выберем пункт Изменение системных переменных среды. И сначала нам откроется окно «Свойства системы», где нажмем на кнопку
Переменные среды:
Затем нам откроется окно, где мы можем увидеть все переменные среды.
(Также можно перейти через Параметры и пункт Система ->Дополнительные параметры системы ->Переменные среды)
Здесь нам нужно исправить системную переменную Path. Для этого выделим ее и нажмем на кнопку «Изменить»:
В эту переменную Path нам надо добавить путь к инструментам JDK. И тут есть два момента.
Во-первых, при установке jdk по умолчанию ряд утилит также устанавливаются в папку C:Program FilesCommon FilesOracleJavajavapath. В том числе это такие файлы как
java.exe и javac.exe. И путь к этой папке по умолчанию добавляется в перемнную Path. То есть мы можем использовать этот путь.
Второй момент — в последних сборках Windows компания Microsoft также устанавливает свои сборки JDK, точнее OpenJDK, которые также по умолчанию добавляются в переменную Path
и которые мы также можем использовать. Но у этих сборок есть большой минус — они применяют одну из прошлых версий JDK (обычно это LTS-сборки). Например, в моем случае это 11-я версия,
хотя текущей является 19-я.
Чтобы использовать последнюю 19-ю версию среди путей в переменной Path убедимся, что путь C:Program FilesCommon FilesOracleJavajavapath располагается выше
путей к сборкам JDK от Microsoft. Для перемещения определенного пути вверх среди переменных среды можно использовать кнопку «Вверх:
Также можно напрямую создать использовать путь «C:Program FilesJavajdk-19bin».
Для создания новой переменной надо нажать на кнопку «Создать» и ввести в новое поле путь «C:Program FilesJavajdk-19bin». Но опять же его следуется с помощью кнопки Вверх поместить
над путями к OpenJDK от Microsoft.
После установки переменной Path перейдем к командной строке/терминалу (в более старых версиях Windows может потребоваться перезауск командной строки) и для проверки версии введем команду
Консоль нам должна в ответ ввести номер только что установленной версии JDK:
java version "19.0.1" 2022-10-18 Java(TM) SE Runtime Environment (build 19.0.1+10-21) Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
И после этого можно вводить только названия утилит без полных путей: