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

Курсы

Программирование
iOS Разработчик. Продвинутый курс Программист 1С Реверс-инжиниринг. Продвинутый курс
-16%
Java Developer. Professional
-17%
JavaScript Developer. Professional
-18%
Flutter Mobile Developer
-15%
MS SQL Server Developer
-14%
Unity Game Developer. Basic
-19%
Супер - практикум по использованию и настройке GIT
-18%
Супер-интенсив "СУБД в высоконагруженных системах"
-18%
Web-разработчик на Python
-11%
Backend-разработчик на PHP
-8%
PostgreSQL
-10%
Базы данных
-19%
Android-разработчик. Базовый курс Разработчик Python. Продвинутый курс Разработчик на Spring Framework AWS для разработчиков Cloud Solution Architecture CI/CD Vue.js разработчик Разработчик Node.js Scala-разработчик Супер - интенсив по Kubernetes Symfony Framework Advanced Fullstack JavaScript developer
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться