Interactive Vaadin to Spring Boot Migration

A hands-on guide to modernizing your Vaadin 8 application.

Why Migrate?

This guide provides a detailed walkthrough for converting a traditional Vaadin 8 Maven project to a modern Vaadin-Spring-Boot application. The primary benefit of this migration is leveraging Spring Boot's auto-configuration, simplified dependency management, and seamless integration with the broader Spring ecosystem. This interactive tool will help you visualize the changes and understand the core concepts behind the migration.

The Migration Process at a Glance

This diagram shows the high-level steps for the migration. Click on any step to jump to the detailed instructions.

1. POM

Update pom.xml

2. Code

Create Main Class

3. Refactor

Annotate UIs & Views

4. Run

Configure & Run

1. Interactive `pom.xml` Comparison

The first and most critical step is updating your `pom.xml`. Instead of just showing the new code, this tool lets you compare the old and new structures side-by-side. The left side represents a typical Vaadin 8 POM, and the right shows the new Spring Boot equivalent. Notice how the Spring Boot parent simplifies dependency management.

Before: Standard Vaadin 8 POM

<properties>
    <vaadin.version>8.14.3</vaadin.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-server</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client-compiled</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-maven-plugin</artifactId>
            <version>${vaadin.version}</version>
            ...
        </plugin>
    </plugins>
</build>

After: Vaadin with Spring Boot

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.18.RELEASE</version>
</parent>

<properties>
    <vaadin.version>8.14.3</vaadin.version>
    <java.version>11</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-spring-boot-starter</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>