Нужна ли функция public static void main(String[] args){...} ? | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Разработчик на Spring Framework
-5%
Flutter Mobile Developer NoSQL iOS Developer. Basic
-10%
C++ Developer. Basic C++ Developer. Professional Android Developer. Professional Microservice Architecture Unity Game Developer. Professional Базы данных Node.js Developer React.js Developer Специализация Java-разработчик
-25%
Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect Специализация Administrator Linux
-25%
Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Нужна ли функция public static void main(String[] args){...} ?

Java_Deep_1-5020-576a84.10_site.png

На первый взгляд может показаться, что приложение без функции public static void main(String[] args){...} бессмысленно. Ведь его нельзя запустить. Точнее его нельзя запустить через вызов java -jar name.jar.

И тем не менее, многие Java-разработчики регулярно пишут такие приложения. И запаковывают их не в jar-файлы, а в war-файлы. Давайте сегодня с этими war-файлами и разберёмся.

Продолжая открытый вопрос про запуск приложения, нужно отметить, что его код нельзя исполнить в его собственном потоке main. Но мы можем исполнить его в других потоках. По аналогии с библиотеками: библиотека не запускает себя сама, вы запускаете библиотеку в собственных потоках.

Ваше приложение может быть «библиотекой» для другого приложения. И в этом случае, другое приложение называют application server. AS запускает ваше приложение в собственных потоках. Для него ваш код как актёры для Голливуда. Не актёры звонят в Голливуд. Голливуд звонит актёрам. Таким образом, вы пишите приложения не с использованием библиотек, а для application server-а.

В общем случае application server должен быть написан по спецификации Java EE. Но есть частные случаи, которые поддерживают только работу веб-сервера и сервлетов. Их называют веб-серверы и сервлет-контейнеры. Вот для них как раз Java -разработчики и создают war-файлы.

Итак, war или WebARchive – это jar. Но в отличие от обычного в нём: — нет мета-информации о методе main, с выполнения которого должно начинаться выполнение приложения; — есть директория WEB-INF и в ней web.xml -- файл с инструкциями для сервлет-контейнера; — есть сервлеты (без них war-файл практически бесполезен); — могут быть файлы статических страниц (да-да jar, в котором в корне лежат index.html, index.js и index.css)

Приготовить такой war-файл можно при помощи плагина maven-war-plugin к Maven. А запускать в любом удобном вам сервлет-контейнере, например в Tomcat или Jetty, просто копированием war-файла в директорию webapps.

Только при копировании не забудьте переименовать его в root.war. Интересно зачем? Присоединяйтесь к ближайшей группе курса «Разработчик Java»: расскажем, покажем, научим!

Есть вопрос? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться