Мы тратим много времени на взлом наших IDE Java (IntelliJ и Eclipse), пытаясь найти самый быстрый способ разработки. В этом смысле разработка веб-приложений — это сука, потому что IDE выпускаются только в двух вариантах:
- Редакция Java SE : действительно для простой разработки приложений ( IntelliJ Community Edition , Eclipse Standard Edition )
- Выпуск Java EE (Всё на Земле) : требуется для веб-разработки (IntelliJ Ultimate, Eclipse для Java EE). Это версия, которая включает в себя плагины для JavaScript, CSS, XML, JSP, TLD и армии пони с желе, скачущей над радугой конфет .
Мы хотели бы использовать vanilla IDE даже для веб-приложений на Java, но, видимо, это не так просто, поэтому мы разработали собственное решение. Для других способов сделать это, перейдите прямо к последнему разделу .
Код
Вы можете начать с разветвления этого прототипа на Github . Он включает в себя встроенный Jetty и пример веб-приложения, каждое из которых имеет две задачи: idea
и eclipse
.
cd jetty-embedded gradle idea cd ../helloworld gradle idea
Это создаст два проекта, которые могут быть открыты напрямую с помощью vanilla IDE (Community / Java SE, а не Bells-and-Whistles Edition).
Привет мир
helloworld
это демонстрационное веб-приложение, которое будет компилировать классы и копировать ресурсы в src/main/webapp/WEB-INF/classes
. Он использует аннотации web 3.0 для развертывания сервлетов без использования web.xml
дескриптора развертывания.
Чтобы развернуть несколько веб-приложений на одном сервере, просто используйте helloworld
проект в качестве шаблона для других веб-приложений.
Важное примечание для пользователей IntelliJ : вам следует активировать make project automatically
этот проект (находится внутри Settings » Compiler
), поскольку он не будет следовать обычному рабочему процессу компиляции, ожидаемому в IntelliJ. Вы также можете рассмотреть возможность сделать это .
пристань
jetty
использует встроенную Jetty для развертывания любого количества веб-приложений. Он включает в себя JettyServer
класс, который получает через командную строку имена проектов для развертывания. Например, JettyServer helloworld
будет искать helloworld
папку в родительском каталоге, развернуть свою src/main/webapp
папку.
Сервер может быть запущен:
- Создание средства запуска в вашей IDE (Eclipse или IntelliJ), которое выполняет метод main с
helloworld
аргументом. Проект уже включает в себя такой лаунчер для Eclipse вsrc/main/launchers
папке. - Запустите приложение с помощью командной строки .
gradle jetty
запустит сервер и откроет сокет отладки в порту 5005, так что вы все равно можете подключиться из IDE для отладки. В IntelliJ создайте сеанс удаленной отладки и примите параметры по умолчанию.
Продолжайте читать
Есть много причин, чтобы сделать это таким образом, не только для получения максимально быстрой среды программирования, но и для дополнительной гибкости : настройка пути к классам (общие файлы jar, белые списки), сертификаты SSL, конфигурации, зависящие от среды, остановка или перезапуск программно. ..
Это решение, которое мы установили на нескольких клиентах, но оно далеко не уникально:
- Пользователи Spring найдут в Spring boot интересную автономную Jetty, встроенную в ваше веб-приложение.
- Jetty Bootstrap — это еще один проект для преобразования вашего веб-приложения в автономное приложение с минимальными усилиями.
- Jetty Gradle Hello World — пример интеграционного тестирования с использованием Gradle и плагина Jetty.
Любой из них также может быть использован в вашей среде Java SE.
Действуй! Не забудьте проверить код и оставить нам любой отзыв на Github или Twitter .