Привет, харбаюзер. В этой серии статей мы напишем REST API с использованием Vert.x. Начнём с простого: установки самого vert.x-а и настройки запуска простого приложения в IDE.
Vert.x — этакий node.js из мира Java. Отличает его большой список поддерживаемых языков (на момент написания статьи: Java, JavaScript, CoffeeScript, Groovy, Python, Ruby, Clojure, Scala), а также наличие механизма запуска блокирующих операций и возможность использования нескольких потоков, сохраняя при этом принцип одного рабочего потока.
Больше информации о фреймворке:
vertx.io/manual.html — Официальный мануал
habrahabr.ru/post/181686 — Единственный найденный мной пост на хабре о фреймворке
Для начала установим сам vert.x, для этого перейдём в раздел downloads на официальном сайте фреймворка. Распаковывем архив, добавляем директорию bin в PATH. Проверяем правильность установки, запуская следующую команду в терминале:
И всё. Один из главных принципов фреймворка — простота конфигурации.
Далее при помощи apache maven сгенерируем пример проекта. Для этого выполним следующую команду в терминале:
Выбираем среди найденных archetype-ов(на момент написания статьи их точно не более одного) io.vertx:vertx-maven-archetype и выбираем последнюю версию. Задаём в терминале следующие параметры будущего приложения: groupId, artifactId, версию и базовый package. Для примера проекта я задал их соответственно: com.example, vertx-example, 1.0.0-SNAPSHOT, com.example. Проверим, что проект успешно собирается, для этого выполним следующую команду в терминале:
Если вы видите сообщение BUILD SUCCESS, значит всё сделано правильно, при этом структура проекта должна выглядеть примерно так:

Настроим запуск проекта. Я настраивал в IntelliJ IDEA, но уверяю вас с другими IDE проблем быть не должно.
Есть небольшая проблема с разрешением зависимостей из пакетов vertx-core, vertx-platform и vertx-hazelcast. В нашем проекте сейчас scope у них выставлен provided, что означает что они будут предоставлены окружением. Однако запускать наше приложение в IDE, которая не предоставляет этих пакетов, поэтому создадим два maven профиля: один для запуска в IDE, другой для сборки приложения, которое будет запускаться непосредственно на vert.x, который несёт в себе нужные зависимости. Для этого добавим следующий текст в наш pom.xml:
И изменим scope для пакетов vertx:
Для того чтобы запускать проект одним кликом создадим следующую конфигурацию запуска:

По сути мы запускаем программу с
Теперь можно запускать наше приложение, если при запуске вывод в консоль похож на следующий, значит всё сделано правильно:
Благодарю за внимание. В следующий раз мы разберём, что к чему в этом проекте и начнём писать собственное приложение.
Исходный код получившегося проекта доступен на GitHub: github.com/X3H4/vertx-example
Немного общей информации о фреймворке
Vert.x — этакий node.js из мира Java. Отличает его большой список поддерживаемых языков (на момент написания статьи: Java, JavaScript, CoffeeScript, Groovy, Python, Ruby, Clojure, Scala), а также наличие механизма запуска блокирующих операций и возможность использования нескольких потоков, сохраняя при этом принцип одного рабочего потока.
Больше информации о фреймворке:
vertx.io/manual.html — Официальный мануал
habrahabr.ru/post/181686 — Единственный найденный мной пост на хабре о фреймворке
Установка фреймворка, настройка IDE и запуск примера проекта
Для начала установим сам vert.x, для этого перейдём в раздел downloads на официальном сайте фреймворка. Распаковывем архив, добавляем директорию bin в PATH. Проверяем правильность установки, запуская следующую команду в терминале:
vertx version
И всё. Один из главных принципов фреймворка — простота конфигурации.
Далее при помощи apache maven сгенерируем пример проекта. Для этого выполним следующую команду в терминале:
mvn archetype:generate -Dfilter=io.vertx:
Выбираем среди найденных archetype-ов(на момент написания статьи их точно не более одного) io.vertx:vertx-maven-archetype и выбираем последнюю версию. Задаём в терминале следующие параметры будущего приложения: groupId, artifactId, версию и базовый package. Для примера проекта я задал их соответственно: com.example, vertx-example, 1.0.0-SNAPSHOT, com.example. Проверим, что проект успешно собирается, для этого выполним следующую команду в терминале:
mvn install
Если вы видите сообщение BUILD SUCCESS, значит всё сделано правильно, при этом структура проекта должна выглядеть примерно так:

Настроим запуск проекта. Я настраивал в IntelliJ IDEA, но уверяю вас с другими IDE проблем быть не должно.
Есть небольшая проблема с разрешением зависимостей из пакетов vertx-core, vertx-platform и vertx-hazelcast. В нашем проекте сейчас scope у них выставлен provided, что означает что они будут предоставлены окружением. Однако запускать наше приложение в IDE, которая не предоставляет этих пакетов, поэтому создадим два maven профиля: один для запуска в IDE, другой для сборки приложения, которое будет запускаться непосредственно на vert.x, который несёт в себе нужные зависимости. Для этого добавим следующий текст в наш pom.xml:
<profiles> <profile> <id>local</id> <properties> <vertx-scope>compile</vertx-scope> </properties> </profile> <profile> <id>deployment</id> <properties> <vertx-scope>provided</vertx-scope> </properties> </profile> </profiles>
И изменим scope для пакетов vertx:
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <version>${vertx.version}</version> <scope>${vertx-scope}</scope> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-platform</artifactId> <version>${vertx.version}</version> <scope>${vertx-scope}</scope> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-hazelcast</artifactId> <version>${vertx.version}</version> <scope>${vertx-scope}</scope> </dependency>
Для того чтобы запускать проект одним кликом создадим следующую конфигурацию запуска:

По сути мы запускаем программу с
org.vertx.java.platform.impl.cli.Starter
в качестве входной точки и аргументами runmod com.example~vertx-example~1.0-SNAPSHOT
. Аргумент указывает на то, какой модуль запускать. Логика именования следующая: groupId~artifactId~version.Теперь можно запускать наше приложение, если при запуске вывод в консоль похож на следующий, значит всё сделано правильно:
Apr 08, 2014 5:47:39 PM org.vertx.java.core.logging.impl.JULLogDelegate info INFO: PingVerticle started Apr 08, 2014 5:47:39 PM org.vertx.java.core.logging.impl.JULLogDelegate info INFO: Succeeded in deploying module
Благодарю за внимание. В следующий раз мы разберём, что к чему в этом проекте и начнём писать собственное приложение.
Исходный код получившегося проекта доступен на GitHub: github.com/X3H4/vertx-example