Начало работы с Gradle и фреймворком Spark

Автор: | 01.08.2026

Одна из худших фраз, которые я слышу на студенческих хакатонах: «Я не могу создать крутое веб-приложение, потому что знаю только Java». Я вижу два решения этой дилеммы. Мы можем либо согласиться засучить рукава и начать учить Ruby или Python, либо использовать существующие знания и развеять это заблуждение. Даже ветеран может не ассоциировать Java с быстрым созданием веб-приложений, но сегодня я покажу вам, как легко это может быть с помощью фреймворка Spark. Spark — это микро-веб-фреймворк для Java, похожий на Sinatra для Ruby или Flask для Python. С помощью 7 простых строк кода и небольшого конфигурационного файла мы можем запустить приложение и начать обрабатывать «бодрящие» HTTP-запросы.

Я буду делать всё это в Java IDE IntelliJ IDEA благодаря её отличным интеграциям. Вы можете скачать бесплатную копию Community Edition здесь.

Мы будем использовать ngrok для безопасного предоставления доступа к нашему приложению для Twilio. Ознакомьтесь с руководством Кевина, если вы раньше им не пользовались.

Наряду со Spark мы увидим, как легко включить вспомогательную библиотеку Twilio для Java, чтобы принимать звонки в вашем приложении. Если у вас ещё нет аккаунта Twilio, вы можете создать его бесплатно здесь. Нам также понадобится номер телефона, поддерживающий голосовые вызовы и SMS.

Нам также понадобится инструмент сборки, чтобы связать всё воедино. Это, безусловно, один из самых больших барьеров для входа, когда вы выходите за рамки небольших Java-проектов. Я буду использовать Gradle, но вы можете использовать Maven или другой инструмент, с которым вам удобнее.

Давайте начнём с того, что убедимся, что у нас установлен Java 8 SE Development Kit (JDK).

Проверим, что всё в порядке, выполнив следующую команду в вашей оболочке или командной строке.

Уф. Теперь, когда мы всё настроили, пора переходить к самой интересной части!

Начните с создания нового проекта Gradle. Заполните GroupId и ArtifactId как хотите. На следующем экране обязательно отметьте «Use auto-import», «Create directories for empty content roots automatically» и «Use default gradle wrapper».

Gradle использует синтаксис Groovy в отличие от традиционного XML, который вы бы нашли в Maven или Ant. Мне кажется, что он гораздо более доступен, чем альтернативы. Конфигурационные файлы могут быть пугающими, поэтому мы пройдём по ним и подробно объясним этот. Вы можете найти готовый файл в конце.

Откройте созданный файл с именем `build.gradle`

и измените его содержимое на следующее.

Здесь мы определяем, какие плагины Gradle включить. Плагин Java нужен нам для компиляции и сборки нашего Java-кода. Плагины Application и Shadow необязательны, но они делают сборку **uber-jar** (портативный исполняемый файл, содержащий все наши зависимости) очень простой.

Здесь указывается, что нам требуется Java 8, и объявляется имя класса-точки входа для нашего приложения.

Наконец, мы объявляем зависимости, которые мы хотим, чтобы Gradle включил во время компиляции. Здесь вы можете включить любые другие зависимости в формате «GROUP:NAME:VERSION».

Теперь мы можем создать наш основной класс с именем «HelloSpark» в `src/main/java`

.

Не типичное Java-веб-приложение, а? Со Spark невероятно легко работать, даже если вы не знаете много Java. Всякий раз, когда GET-запрос делается к корневому URL вашего приложения, вызывается простая лямбда-функция и возвращает строку «Hello, World!»

Чтобы быстро запустить его, вы можете щёлкнуть правой кнопкой мыши внутри нашего файла класса и выбрать «Run ‘HelloSpark.main()’», но вместо этого давайте соберём наш uber-jar, дважды щёлкнув по задаче Gradle HelloSpark/Tasks/shadow/shadowJar в меню Gradle справа (примечание: если вы не видите меню Gradle, нажмите на квадрат в левом нижнем углу, чтобы оно появилось).

Если вы используете Gradle без IntelliJ, вам нужно будет выполнить следующее.

Вы можете найти собранный JAR в build/libs/HelloSpark-all.js и запустить его, щёлкнув по нему правой кнопкой мыши и выбрав «Run HelloSpark-all.jar». Теперь посетите http://localhost:4567 в вашем браузере и улыбнитесь вашему первому работающему Java-веб-приложению.

Теперь, когда у нас есть работающее веб-приложение, давайте поднимем его на ступеньку выше! Мы собираемся настроить наш код, чтобы иметь возможность принимать SMS, содержащее название песни. Затем мы ответим телефонным звонком и используем API Spotify для воспроизведения фрагмента песни.

Добавьте следующую зависимость в ваш файл `build.gradle`

.

Этот метод примет тело SMS, которое поступает на наш сервер от Twilio. Затем он делает API-запрос к Spotify и обходит JSON-ответ, чтобы найти `preview_url`

. Если по какой-то причине он не может этого сделать, он выводит трассировку стека и возвращает `null`

.

Теперь нам понадобится ваш URL ngrok. Запустите его, выполнив следующую команду, и получите ваш URL.

Теперь внутри вашего метода `main`

добавьте следующий маршрут. Обязательно замените URL ngrok, номер телефона Twilio и учётные данные аккаунта на свои.

Когда новое SMS поступает на наш номер телефона, Twilio отправляет нам POST-запрос с информацией о нём. Мы создаём URL для следующего маршрута, который мы собираемся написать, добавляя название песни, которую мы ищем, в строку запроса. Затем мы используем Twilio-Java SDK для создания телефонного звонка с этим URL в качестве инструкций о том, что делать, когда пользователь ответит. Мы также отвечаем некоторым TwiML, чтобы сказать Twilio отправить SMS обратно пользователю с помощью глагола.

Наконец, добавьте следующий маршрут ниже того, который мы только что написали.

Эта конечная точка отвечает некоторым TwiML, чтобы сказать Twilio, как обработать телефонный звонок, который мы только что сделали. Она извлекает название трека из URL и вызывает наш метод `getTrackUrl`

с ним. Затем она либо добавляет инструкцию с этим URL, либо инструкцию с сообщением.

Наш завершённый код (с импортами) должен выглядеть следующим образом.

Запустите класс или соберите uber-jar и запустите его. Если всё пойдёт хорошо, вы сможете отправить SMS с названием песни на ваш номер телефона Twilio и вскоре получить звонок с классными треками.

ПОЗДРАВЛЯЕМ! Вы создали полноценное веб-приложение, используя фреймворк Spark, Twilio и Spotify. Благодаря таким отличным библиотекам, как Spark и Unirest, наш код почти такой же краткий, как у похожих приложений, написанных на Ruby или Python. Gradle сделал загрузку зависимостей и компиляцию всего очень простой. Конфигурационный файл не страшен и может быть использован повторно для будущих проектов. Помните, что наш uber-jar содержит всё необходимое для запуска нашего приложения, что делает его развертывание где угодно очень простым. Надеюсь, вы рассмотрите возможность использования Java для вашего следующего проекта после создания этого совершенно *мелодичного* веб-приложения.