Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Создание проекта

Проект 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.