Перейти к содержимому

Как скомпилировать консольную программу в java

  • автор:

#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. Ключевые моменты

  1. В процессе компиляции исходного кода каждый отдельный класс помещается в собственный выходной файл, называемый по имени класса и получающий расширение .class .
  2. По умолчанию компилятор записывает сгенерированный .class в тот же каталог, где находится исходный класс .java .
  3. Ключ -d указывает компилятору, куда записывать сгенерированные .class файлы.
  4. При компиляции могут быть созданы отсутствующие каталоги соответствующие пакету компилируемого класса.
  5. Если в ключе -d указан не существующий каталог, будет выброшена ошибка компиляции.
  6. При запуске программы указывается только один класс без расширения .class .
  7. -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.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. 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 — создание архива.

        На изучение:

        1. статья на habr, посвященная вашему вопросу;
        2. официальная документация на консольную утилиту javac (в рамках JDK 11);
        3. официальная документация на консольную утилиту java (в рамках JDK 11);
        4. официальная документация на консольную утилиту jar (в рамках JDK 11).

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *