#8. Компиляция и выполнение java программы с командной строки
Продолжаем курс программирования java для android-разработчиков. Данный урок научит вас запускать java программы из командной строки, для общего понимания процесса компиляции и запуска программ на языке java.
После создания простого приложения, которое выводит что-то на экран, вы должны компилировать ваш код и запустить его.
Независимо от того, какую операционную систему вы используете, Linux, Mac или Windows, если на вашем компьютере установлен JDK (Java Development Kit), вы можете в консоли набрать следующие команды чтобы скомпилировать и запустить программу:
- javac (или javac.exe)
- java (или java.exe)
В первом случае будет вызван компилятор javac.exe, а во втором случае – запускалка java.exe, которая стартует нашу программу. Эти файлы лежат в папке bin вашего JDK.
Рассмотрим на примере. Вспомним код из первого урока – создадим файл с названием Main.java.
public class Main < public static void main(String[] args) < System.out.println("Hello, World!"); >>
Идем в папку, куда среда разработки сохранила проект. Я работаю в IntelliJIDEA, и мой проект лежит в C:\Users\имя пользователя\IdeaProjects\название проекта\src. Находим там наш файл Main.java. Консоль вызывается так: щелкаем правой клавишей мыши с зажатой клавишей Shift на пустом месте в папке, где лежит файл нашей программы, и выбираем пункт контекстного меню “Открыть окно команд”.
Для того, чтобы скомпилировать его нужно набрать в консоли команду javac и в качестве параметра передать имя нашего файла:
javac Main.java
Эта команда вызовет компилятор, который создаст файл Main.class, содержащий скомпилированный код нашей java программы.
Чтобы запустить ее, нужно ввести команду java с именем класса (не файла!) в качестве параметра:
java Main.class //так неправильно
java Main //так правильно
Аргументы
В главном классе нашей программы есть метод public static void main(. ) , который в качестве аргумента принимает массив String[] args.
Массив строк в качестве аргумента можно передать в программу при запуске из командной строки .
Любой массив в Java имеет переменную длину, это число элементов в этом массиве.
Добавим такой код в класс Main.java:
public class Main < public static void main(String[] args) < for (int i = 0; i < args.length; i++) < System.out.println(args[i]); >> >
И чтобы скомпилировать и запустить программу с аргументами, пишем в консоль:
javac Main.java java Main arg0 arg1 arg2
Упражнение
Создайте программу, которая выводит аргументы, переданные при запуске, в одну строку.
Дополнительное чтение:
- Сборка и выполнение Java программ
- Исключения (Exception) и их обработка в Java
Компиляция и запуск приложения из командной строки
Для компиляции программ из командной строки (консоли) используется команда javac.
javac [ключи] [исходники]
Чтобы получить список возможных ключей, выполните:
javac –help
Чтобы скомпилировать программу MyFirstApp , запустите компилятор, указав имя исходного файла в командной строке следующим образом:
javac MyFirstApp.java
Компилятор javac создаст файл MyFirstApp.class , содержащий версию байт-кода.
В процессе компиляции исходного кода каждый отдельный класс помещается в собственный выходной файл, называемый по имени класса и получающий расширение .class .
2. Компиляция с помощью -d.
По умолчанию компилятор записывает сгенерированный .class в тот же каталог, где находится исходный класс .java . Это хорошо для маленьких проектов, но при работе на больших проектах файлы .java и .class должны храниться отдельно.
Ключ -d позволяет указать компилятору, куда записывать сгенерированные .class файлы.
Например, у нас есть такая структура папок:

Следующая команда, выполненная из project1 папки сгенерирует файл MyFirstApp.class и запишет его в папку classes (предполагаем, что MyFirstApp не содержит оператора package ):
cd project1 javac -d classes src/MyFirstApp.java
Теперь давайте рассмотрим пример компиляции класса com.company.lesson1.MyFirstApp , находящегося в пакете com.company.lesson1 . Имеется такая структура каталогов:

Следующая команда, выполненная из src каталога, сгенерирует файл MyFirstApp.class , и запишет его в каталог classes/com/company/lesson1:
cd myProject/src javac -d ../classes com/company/lesson1/MyFirstApp.java
Если каталог classes/com/company/lesson1 не существует, то он будет создан при компиляции.
Если же не существует каталог classes, то вы получите ошибку компиляции.
3. Запуск программы с помощью команды java.
Чтобы выполнить программу из командной строки, следует воспользоваться загрузчиком приложений Jаvа, который называется java.
java [ключи] класс [аргументы]
Для получения списка возможных ключей, выполните:
java –help
Чтобы выполнить программу, передадим имя класса MyFirstApp (предполагаем, что MyFirstApp не содержит оператора package ) в качестве аргумента командной строки:
java MyFirstApp
Если класс MyFirstApp находится в пакете, то выполняем команду:
java com.company.lesson1.MyFirstApp
Стоит заметить, что при запуске программы указывается только один класс без расширения .class .
4. Ключевые моменты
- В процессе компиляции исходного кода каждый отдельный класс помещается в собственный выходной файл, называемый по имени класса и получающий расширение .class .
- По умолчанию компилятор записывает сгенерированный .class в тот же каталог, где находится исходный класс .java .
- Ключ -d указывает компилятору, куда записывать сгенерированные .class файлы.
- При компиляции могут быть созданы отсутствующие каталоги соответствующие пакету компилируемого класса.
- Если в ключе -d указан не существующий каталог, будет выброшена ошибка компиляции.
- При запуске программы указывается только один класс без расширения .class .
- -d может содержать относительные и абсолютные пути.
Презентацию с видео можно скачать на Patreon .
Как скомпилировать и запустить программу на Java?
В одной из предыдущих статей я уже рассказывал как начать писать программы на Java, но тогда, чтобы как можно быстрее показать Вам как просто можно начать писать на Java я использовал среду разработки NetBeans, но сейчас я хочу рассказать Вам как скомпилировать и запустить java-файл используя лишь инструменты стандартной поставки JDK.
Вы можете возразить мне, что дескать зачем это нужно, когда есть замечательные среды разработки, которые и ошибки исправят и знаки препинания где надо расставят. Но для новичков — это медвежья услуга. Все эти среды разработки являются удобными и мощными обертками над существующими инструментами. Поэтому чтобы стать профессионалом важно знать как это все работает под капотом. Впоследствии, когда вы уже хорошо разберетесь с тем как функционируют компоненты JDK, вам уже будет намного проще разобраться и со средами разработки.
В комплект средств разработки JDK входят две базовые программы, которые понадобятся нам, для того, чтобы скомпилировать — javac.exe и запустить — java.exe программу на Java. Эти консольные программы находятся в папке bin JDK. У меня этот путь следующий:
C:\Java\jdk1.8.0_91\bin\java.exe — java интерпритатор
C:\Java\jdk1.8.0_91\bin\javac.exe — java компилятор
Чтобы у Вас была возможность скомпилировать и запустить Java программу эти консольные программы должны быть доступны в переменной среды PATH вашего ПК. Как добавить свой путь в эту переменную Вы можете найти в Интернете.
Итак, представим, что JDK мы установили, нужные пути прописали, теперь давайте создадим файл Java программы, который будет выводить некоторую надпись в консоль. Код класса должен лежать в файле HelloWorld.java в кодировке UTF-8.
class HelloWorld
public static void main(String[] args)
System.out.println(«Hello, Myrusakov.RU»);
>
>
Компилируем файл так:
C:/> javac HelloWorld.java
Если ошибок нет, то на выходе Вы получите файл HelloWorld.class в той же папке. Запустить этот файл можно командой:
C:/> java HelloWorld
Во втором случае расширение класса указывать не нужно.
При компилировании, текст Java программы преобразуется в байт-код, понятный виртуальной машине Java. Байт-код — это такое промежуточное представление, которое может запускаться везде где есть исполняемая среда. В этом то и состоит мощь Java. Один раз написав и скомпилировав программу Вам уже не будет надобности думать, а запуститься ли она на другом компьютере, с другой операционной системой. Ваша Java программа будет работать везде, где есть виртуальная машина Java.
Таким образом мы написали программу на Java, скомпилировали ее и запустили. Конечно с помощью интегрированной среды разработки это можно было бы сделать куда быстрее и без лишних слов, как говориться, но знание базового процесса создания программ на Java, конечно необходимо. А для тех, кто хочет насколько это возможно быстро освоить Java у меня есть специальный видеокурс «Программирование на Java с Нуля до Гуру».

![]()
Создано 06.06.2019 10:26:37
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.
Как правильно компилировать с помощью cmd.exe?

Задам нубский вопрос: как компилировать через cmd.exe в моем случае программу? В файле MiniDuckSimulator нах-ся psvm. Где я вообще могу посмотреть, как правильно компилировать файлы в различных случаях, а то я не очень понимаю, когда использовать -cp, -sourcepath, -classpath и т.п. Мне очень хотелось бы разобраться вэтом вопросе и научиться архивировать, распаковывать через командную строку. Что можете посоветовать?
Отслеживать
задан 30 июн 2020 в 21:13
Александр Скворцов Александр Скворцов
123 1 1 серебряный знак 6 6 бронзовых знаков
На habr имеется неплохая статья.
30 июн 2020 в 21:25
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Консольная утилита javac :
Используется для компиляции программы, основной опцией которой является:
- —source-path / -sourcepath — указывает на каталог, в котором находятся файлы исходного кода (для java — это файлы с расширением .java ):
- используется при компиляции исходников в байткод (в .class файлы);
Консольная утилита java :
Используется для запуска программы, основной опцией которой является:
- —class-path path / -classpath path / -cp — указывает на каталог, в котором находятся скомпилированные файлы ( .class ):
- используется при запуске программы (за счет интерпретации на стороне JVM файлов байткода, т.е. .class файлов).
Консольная утилита jar :
Используется для манипуляции с архивами (создания архивов, извлечение из них .class файлов, . ), основной опцией которой является:
- —create / -c — создание архива.
На изучение:
- статья на habr, посвященная вашему вопросу;
- официальная документация на консольную утилиту javac (в рамках JDK 11);
- официальная документация на консольную утилиту java (в рамках JDK 11);
- официальная документация на консольную утилиту jar (в рамках JDK 11).