Vaadin @Route is not processed when packaging as war file

I am trying to get a deploy a basic Vaadin application to Google App Engine Java 8.
I used the SpringBoot example from Google https://github.com/GoogleCloudPlatf…
I then modified the POM file to include Vaadin and deleted the RestController that came with the example.
I created a simple component with @Route in the sample package of @SpringBootApplication main class.

When I run the code locally using mvn spring-boot:run, it works fine.
However, when I run using Google App Engine build mvn package appengine:run I get HTTP ERROR 503 Service Unavailable

It looks like the @Route annotation is not processed in the appengine run configuration. Below are the Java files and the POM file

package com.example.appengine.demos.springboot;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.PWA;

@Route
@PWA(name = "My App", shortName = "App")
public class MainView extends VerticalLayout {
    public MainView() {
        Button button = new Button("Hi",
                                    event -> Notification.show("Clicked!"));
        add(button);
    }
    
}
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.google.appengine.demos</groupId>
  <artifactId>springboot-appengine-standard</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>springboot-appengine-standard</name>
  <description>Demo project for Spring Boot</description>

  <parent>
    <groupId>com.google.cloud.samples</groupId>
    <artifactId>shared-configuration</artifactId>
    <version>1.0.18</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring.boot.version>2.3.3.RELEASE</spring.boot.version> <!-- DO NOT UPDATE w/o MANUAL TESTING -->
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <vaadin.version>14.3.4</vaadin.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>${spring.boot.version}</version>
            <!-- Exclude Tomcat so that it doesn't conflict w/ Jetty server -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- Exclude any jul-to-slf4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Include Servlet API -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <version>${spring.boot.version}</version>
      <scope>test</scope>
    </dependency>

    <!-- vaadin -->
    <dependency>
      <groupId>com.vaadin</groupId>
      <!-- Replace artifactId with vaadin-core to use only free components -->
      <artifactId>vaadin-core</artifactId>
      <exclusions>
          <!-- Webjars are only needed when running in Vaadin 13 compatibility mode -->
          <exclusion>
              <groupId>com.vaadin.webjar</groupId>
              <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
              <groupId>org.webjars.bowergithub.insites</groupId>
              <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
              <groupId>org.webjars.bowergithub.polymer</groupId>
              <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
              <groupId>org.webjars.bowergithub.polymerelements</groupId>
              <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
              <groupId>org.webjars.bowergithub.vaadin</groupId>
              <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
              <groupId>org.webjars.bowergithub.webcomponents</groupId>
              <artifactId>*</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
  <dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-spring-boot-starter</artifactId>
    <exclusions>
        <!-- Excluding so that webjars are not included. -->
        <exclusion>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-core</artifactId>
        </exclusion>
    </exclusions>
  </dependency>
    <!-- Development dependencies -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jetty</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
  </dependency>
  </dependencies>

  <dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
          <groupId>com.vaadin</groupId>
          <artifactId>vaadin-bom</artifactId>
          <version>${vaadin.version}</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>

      <!-- vaadin -->
      <plugin>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-maven-plugin</artifactId>
        <version>${vaadin.version}</version>
        <executions>
            <execution>
                <goals>
                    <goal>prepare-frontend</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
          
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${spring.boot.version}</version>
      </plugin>
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.3.0</version>
        <configuration>
          <!-- can be set w/ -DprojectId=myProjectId on command line -->
          <projectId>myproject</projectId>
          <!-- set the GAE version or use "GCLOUD_CONFIG" for an autogenerated GAE version -->
          <version>GCLOUD_CONFIG</version>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.1</version>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>


    </plugins>
  </build>


</project>

After a lot of diagnosing, it seems the issue is that adding vaadin-core to the project make it undeployable on the provided Jetty server. GAE is giving the error javax.servlet.ServletException: Servlet class name (com.google.apphosting.runtime.jetty9.NamedDefaultServlet) can't be found!

So I’m guessing just including vaadin-core is changing the default setting of the application.

I managed to get the issue to a minimal reproducible example.
Starting from the Spring Boot example on GAE8 https://github.com/GoogleCloudPlatf…

Using the POM below, just adding vaadin-core dependency, results in 503 error when running mvn package appengine:run. Running the project with mvn package spring-boot:run works regradeless if the vaadin-core dependency is included or not.

I appreciate any help

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.google.appengine.demos</groupId>
  <artifactId>springboot-appengine-standard</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>springboot-appengine-standard</name>
  <description>Demo project for Spring Boot</description>

  <parent>
    <groupId>com.google.cloud.samples</groupId>
    <artifactId>shared-configuration</artifactId>
    <version>1.0.18</version>
  </parent>


<dependencyManagement>
  <dependencies>
     <dependency>
         <!-- Import dependency management from Spring Boot -->
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-dependencies</artifactId>
         <version>${spring.boot.version}</version>
         <type>pom</type>
         <scope>import</scope>
     </dependency>
     <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-bom</artifactId>
      <version>${vaadin.version}</version>
      <type>pom</type>
      <scope>import</scope>
  </dependency>
 </dependencies>
</dependencyManagement>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring.boot.version>2.3.3.RELEASE</spring.boot.version> <!-- DO NOT UPDATE w/o MANUAL TESTING -->
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <vaadin.version>14.3.4</vaadin.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>${spring.boot.version}</version>
            <!-- Exclude Tomcat so that it doesn't conflict w/ Jetty server -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- Exclude any jul-to-slf4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Include Servlet API -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>


      <!-- vaadin 
        when included mvn clean package appengine:run 
        results in 503
      -->
      <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-core</artifactId>
    </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
        <scope>provided</scope>
      </dependency>

  </dependencies>



  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${spring.boot.version}</version>
      </plugin>
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.3.0</version>
        <configuration>
          <!-- can be set w/ -DprojectId=myProjectId on command line -->
          <projectId>myProjectId</projectId>
          <!-- set the GAE version or use "GCLOUD_CONFIG" for an autogenerated GAE version -->
          <version>GCLOUD_CONFIG</version>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.1</version>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>

        <plugin>
          <groupId>com.vaadin</groupId>
          <artifactId>vaadin-maven-plugin</artifactId>
          <version>${vaadin.version}</version>
          <executions>
              <execution>
                  <goals>
                      <goal>prepare-frontend</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>
    </plugins>
  </build>


</project>

Thanks a lot for the analysis!
Unfortunately, Vaadin doesn’t support Google App Engine. Maybe you can open this as an improvement ticket on https://github.com/vaadin/