Spring 4/3 and Vaadin 14 do not work

I tried to deploy Base Starter for Vaadin Flow tutorial from Vaadin Tutorials in Spring 5 Sts with JDK-12 and also in Spring 4 and in Eclipse Oxygen 3a with JDK-1.8. None of them worked.

Option Spring Boot was chosen.

For JDK-12 had to add dependency for jaxb in pom.xml and change java version from 1.8 to 12. Java Compile compliance level to 12.

Here is the revised pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<modelVersion>4.0.0</modelVersion>
<groupId>com.gmail.richard</groupId>
<artifactId>my-starter-project</artifactId>
<name>my-starter-project</name>
<version>2.0-SNAPSHOT</version>
<packaging>jar</packaging>

<properties>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <vaadin.version>14.0.0</vaadin.version>

    <drivers.dir>${project.basedir}/drivers</drivers.dir>
    <drivers.downloader.phase>pre-integration-test</drivers.downloader.phase>
</properties>

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

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </pluginRepository>
</pluginRepositories>

<repositories>
    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <!-- Repository used by many Vaadin add-ons -->
    <repository>
        <id>Vaadin Directory</id>
        <url>https://maven.vaadin.com/vaadin-addons</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

<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>
javax.xml.bind jaxb-api 2.4.0-b180830.0359 com.vaadin vaadin com.vaadin.webjar * org.webjars.bowergithub.insites * org.webjars.bowergithub.polymer * org.webjars.bowergithub.polymerelements * org.webjars.bowergithub.vaadin * org.webjars.bowergithub.webcomponents * com.vaadin vaadin-spring-boot-starter com.vaadin vaadin-core org.springframework.boot spring-boot-devtools true com.vaadin vaadin-testbench test
<build>
    <defaultGoal>spring-boot:run</defaultGoal>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <!--
            Take care of synchronizing java dependencies and imports in
            package.json and main.js files.
            It also creates webpack.config.js if not exists yet.
        -->
        <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>

<profiles>
    <profile>
        <!-- Production mode is activated using -Pproduction -->
        <id>production</id>
        <properties>
            <vaadin.productionMode>true</vaadin.productionMode>
        </properties>

        <dependencies>
            <dependency>
                <groupId>com.vaadin</groupId>
                <artifactId>flow-server-production-mode</artifactId>
            </dependency>
        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <jvmArguments>-Dvaadin.productionMode</jvmArguments>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.vaadin</groupId>
                    <artifactId>vaadin-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build-frontend</goal>
                            </goals>
                            <phase>compile</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

    <profile>
        <id>integration-tests</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>start-spring-boot</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>stop-spring-boot</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <!-- Runs the integration tests (*IT) after the server is started -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <trimStackTrace>false</trimStackTrace>
                        <enableAssertions>true</enableAssertions>
                        <systemPropertyVariables>
                            <!-- Pass location of downloaded webdrivers to the tests -->
                            <webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
                        </systemPropertyVariables>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>com.lazerycode.selenium</groupId>
                    <artifactId>driver-binary-downloader-maven-plugin</artifactId>
                    <version>1.0.17</version>
                    <configuration>
                        <onlyGetDriversForHostOperatingSystem>true
                        </onlyGetDriversForHostOperatingSystem>
                        <rootStandaloneServerDirectory>
                            ${project.basedir}/drivers/driver
                        </rootStandaloneServerDirectory>
                        <downloadedZipFileDirectory>
                            ${project.basedir}/drivers/driver_zips
                        </downloadedZipFileDirectory>
                        <customRepositoryMap>
                            ${project.basedir}/drivers.xml
                        </customRepositoryMap>
                    </configuration>
                    <executions>
                        <execution>
                            <!-- use phase "none" to skip download step -->
                            <phase>${drivers.downloader.phase}</phase>
                            <goals>
                                <goal>selenium</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

</profiles>

This was the original error in pox.xml on line below, before jaxb dependency was added to pom.xml. After adding jaxb the pom error disappeared. However, when I run the project from the command line with mvn spring-boot:run, then the same error message appears.

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

xecution default of goal com.vaadin:vaadin-maven-plugin:14.0.0:prepare-frontend failed:

======================================================================================================
Failed to determine ‘npm.cmd’ tool.
Please install it either:

  • by following the https://nodejs.org/en/download/ guide to install it globally
  • or by running the frontend-maven-plugin goal to install it in this project:
    $ mvn com.github.eirslett:frontend-maven-plugin:1.7.6:install-node-and-npm -DnodeVersion=“v10.16.0”
    ======================================================================================================

I have globally installed node.js v9.11.1 and npm.cmd 5.8.0. npm does not seems to like any version of node.js above v9.

How can I resolve this error so that the project can run?

I think you should upgrade your Node.js to version 10+ as stated in [Release notes]
(https://github.com/vaadin/platform/releases/tag/14.0.0)

@Richard Brousseau, getting the same problem here, did you find a solution? When I run in development mode the application runs well, when turn the production mode on the problem appers! It seems to be a licence problem.

Really i appreciate the effort you made to share the knowledge. This is really a great stuff for sharing. Keep it up . Thanks for sharing.