Создание проекта
Проект Vaadin — это обычный проект Spring Boot на Maven, к которому подключены библиотеки Vaadin. Приложение запускается одной командой: встроенный сервер Tomcat поднимается внутри него, ничего устанавливать отдельно не нужно.
Откуда взять проект
Есть два официальных генератора:
- start.vaadin.com — генератор Vaadin. Выберите Flow, задайте имя проекта и нажмите Download — придёт архив с готовым проектом.
- start.spring.io — генератор Spring. Выберите Maven, Java 25 и добавьте зависимость Vaadin.
Оба дают одинаковую основу, что и официальный шаблон vaadin/skeleton-starter-flow-spring на GitHub. Распакуйте архив в папку blog — дальше курс показывает файлы этого проекта.
pom.xml
Главное в pom.xml — родитель Spring Boot, BOM Vaadin (он задаёт версии всех модулей) и плагин сборки фронтенда:
<!-- pom.xml (главное) -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.1</version>
</parent>
<groupId>com.example</groupId>
<artifactId>blog</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>25</java.version>
<vaadin.version>25.3.0</vaadin.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>${vaadin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-core</artifactId>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-dev</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<defaultGoal>spring-boot:run</defaultGoal>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>
<execution>
<goals>
<goal>build-frontend</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>vaadin-core содержит бесплатные компоненты. Генератор иногда пишет vaadin — это те же компоненты плюс коммерческие (графики, отчёты), для которых нужна лицензия. В курсе хватит vaadin-core. vaadin-dev включает режим разработки и не попадает в итоговую сборку.
Структура проекта
| Путь | Что внутри |
|---|---|
pom.xml | Зависимости и плагины |
src/main/java/com/example/blog/Application.java | Главный класс |
src/main/java/com/example/blog/views/ | Экраны (views) |
src/main/resources/application.properties | Настройки |
src/main/resources/META-INF/resources/styles.css | Свои стили |
src/main/frontend/generated/ | Файлы, которые Vaadin создаёт сам; не правьте их |
Главный класс
// src/main/java/com/example/blog/Application.java
package com.example.blog;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.page.AppShellConfigurator;
import com.vaadin.flow.theme.lumo.Lumo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@StyleSheet(Lumo.STYLESHEET)
public class Application implements AppShellConfigurator {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}@SpringBootApplication запускает Spring. Интерфейс AppShellConfigurator говорит Vaadin, что настройки всей страницы лежат в этом классе, а @StyleSheet(Lumo.STYLESHEET) подключает стандартную тему оформления Lumo.
Запуск
./mvnwНа Windows — mvnw.cmd. Благодаря defaultGoal это то же самое, что ./mvnw spring-boot:run. В конце лога появится:
Vaadin is running in DEVELOPMENT mode - do not use for production deployments.
... TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
... Application : Started Application in 14.45 seconds
... DevModeHandlerManagerImpl : Application running at http://localhost:8080/Откройте http://localhost:8080 в браузере. Пока в проекте нет ни одного экрана, Vaadin сообщит, что маршрут не найден, — первый экран появится в следующем уроке. Пока сервер запущен через devtools, после перекомпиляции классов он перезапускается сам.
Частая ошибка
Если 8080 уже занят другой программой, запуск падает:
Web server failed to start. Port 8080 was already in use.Остановите другую программу или задайте порт в src/main/resources/application.properties: server.port=8081.