Проект и первый сервер
У Javalin нет генератора проектов: это одна библиотека, и проект — обычный Maven-проект с несколькими зависимостями. Мы создадим его вручную: папки, файл pom.xml и класс Main. Это займёт пару минут, зато в проекте не будет ничего лишнего.
Папки проекта
Создайте папку blog с такой структурой:
blog/
├── pom.xml
└── src/
└── main/
└── java/com/example/blog/
└── Main.java
Позже добавятся src/main/resources для файлов и src/test/java для тестов.
pom.xml
Файл pom.xml лежит в корне папки blog:
<!-- pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>blog</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.release>25</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<javalin.version>7.2.3</javalin.version>
</properties>
<dependencies>
<dependency>
<groupId>io.javalin</groupId>
<artifactId>javalin</artifactId>
<version>${javalin.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.18</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.22.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.1</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.6.4</version>
<configuration>
<mainClass>com.example.blog.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>| Зависимость | Зачем |
|---|---|
javalin | Сам фреймворк и встроенный Jetty |
slf4j-simple | Вывод логов в консоль |
jackson-databind | Превращение объектов в JSON и обратно |
Плагин exec-maven-plugin запускает класс Main командой Maven.
Первый сервер
Создайте файл Main.java:
// src/main/java/com/example/blog/Main.java
package com.example.blog;
import io.javalin.Javalin;
public class Main {
public static void main(String[] args) {
Javalin app = Javalin.create(config -> {
config.routes.get("/", ctx -> ctx.result("Привет, Javalin!"));
});
app.start(8080);
}
}Javalin.create принимает лямбду с настройками. В ней config.routes.get объявляет маршрут: на GET / ответить строкой. Метод start(8080) запускает сервер на порту 8080.
Запуск
В папке blog выполните:
mvn compile exec:javaMaven скачает зависимости, скомпилирует код и запустит сервер. В конце лога (сокращён):
[com.example.blog.Main.main()] INFO io.javalin.Javalin - Starting Javalin ...
[com.example.blog.Main.main()] INFO org.eclipse.jetty.server.Server - jetty-12.1.12; ...
[com.example.blog.Main.main()] INFO io.javalin.Javalin - Javalin started in 573ms \o/
[com.example.blog.Main.main()] INFO io.javalin.Javalin - Listening on http://localhost:8080/
[com.example.blog.Main.main()] INFO io.javalin.Javalin - You are running Javalin 7.2.3 (released August 11, 2026).
Откройте http://localhost:8080 в браузере или вызовите сервер из второго терминала:
curl http://localhost:8080Привет, Javalin!
Сервер работает, пока вы не нажмёте Ctrl+C. После каждого изменения кода остановите его и запустите команду снова.
Частая ошибка
Если забыть зависимость slf4j-simple, сервер запускается, но логов нет, а в начале вывода Javalin печатает подсказку:
#########################################################################
Javalin: It looks like you don't have a logger in your project.
The easiest way to fix this is to add 'slf4j-simple':
...
#########################################################################
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
Без логов вы не увидите ни адрес сервера, ни ошибки в обработчиках. Добавьте зависимость из таблицы выше.