Vaadin 24.3.2 version production mode not work

Hello,

In my project developed using Vaadin 24.3.2 version and Spring Boot, I select the production profile and run prepare-install afterwards, then I run the package.json file with node.js and the node-modules folder is created. However, during mvn-install, I encounter the following error:

Cannot invoke “java.lang.Class.isInterface()” because the return value of “org.reflections.Reflections.forClass(String, java.lang.ClassLoader)” is null

Is there anyone who can help with this?

package.json

{
  "name": "no-name",
  "license": "UNLICENSED",
  "type": "module",
  "dependencies": {
    "@vaadin/common-frontend": "0.0.19",
    "construct-style-sheets-polyfill": "3.1.0",
    "lit": "3.1.0",
    "@vaadin/router": "1.7.5",
    "@polymer/polymer": "3.5.1"
  },
  "devDependencies": {
    "strip-css-comments": "5.0.0",
    "@vitejs/plugin-react-swc": "3.5.0",
    "workbox-build": "7.0.0",
    "rollup-plugin-visualizer": "5.9.2",
    "glob": "10.3.3",
    "@rollup/plugin-replace": "5.0.4",
    "async": "3.2.4",
    "workbox-core": "7.0.0",
    "vite": "5.0.6",
    "rollup-plugin-brotli": "3.1.0",
    "@rollup/pluginutils": "5.0.5",
    "vite-plugin-checker": "0.6.2",
    "workbox-precaching": "7.0.0",
    "transform-ast": "2.4.4",
    "typescript": "5.3.3",
    "@vitejs/plugin-react": "4.2.0"
  },
  "overrides": {
    
  },
  "vaadin": {
    "dependencies": {
      "@vaadin/common-frontend": "0.0.19",
      "construct-style-sheets-polyfill": "3.1.0",
      "lit": "3.1.0",
      "@vaadin/router": "1.7.5",
      "@polymer/polymer": "3.5.1"
    },
    "devDependencies": {
      "strip-css-comments": "5.0.0",
      "@vitejs/plugin-react-swc": "3.5.0",
      "workbox-build": "7.0.0",
      "rollup-plugin-visualizer": "5.9.2",
      "glob": "10.3.3",
      "@rollup/plugin-replace": "5.0.4",
      "async": "3.2.4",
      "workbox-core": "7.0.0",
      "vite": "5.0.6",
      "rollup-plugin-brotli": "3.1.0",
      "@rollup/pluginutils": "5.0.5",
      "vite-plugin-checker": "0.6.2",
      "workbox-precaching": "7.0.0",
      "transform-ast": "2.4.4",
      "typescript": "5.3.3",
      "@vitejs/plugin-react": "4.2.0"
    },
    "hash": ""
  }
}

pom.xml

<?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>
    <!-- Vaadin project from https://github.com/vaadin/skeleton-starter-flow-spring -->
    <groupId>a.b.c</groupId>
    <artifactId>abc-web</artifactId>
    <name>abc Web</name>
    <version>2.0.1</version>
    <packaging>war</packaging>
     

    <properties>
        <java.version>17</java.version>
        <spring.boot.version>3.2.0</spring.boot.version>
        <oracle.version>23.3.0.23.09</oracle.version>
   <maven.compiler.source>17</maven.compiler.source>
   <maven.compiler.target>17</maven.compiler.target>
  <vaadin.version>24.3.2</vaadin.version>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

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

    <repositories>
        <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> 
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc11</artifactId>
            <version>${oracle.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <!-- Replace artifactId with vaadin-core to use only free components -->
            <artifactId>vaadin-core</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-spring-boot-starter</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.parttio</groupId>
            <artifactId>line-awesome</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>


    </dependencies>

    <build>
        <defaultGoal>spring-boot:run</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
            </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>

    <profiles>
        <profile>
            <!-- Production mode is activated using -Pproduction -->
            <id>production</id>
            <properties>
                <vaadin.productionMode>true</vaadin.productionMode>
            </properties>
            <dependencies>
                <!-- Exclude development dependencies from production -->
                <dependency>
                    <groupId>com.vaadin</groupId>
                    <artifactId>vaadin-core</artifactId>
                    <version>${vaadin.version}</version>
                    <exclusions>
                        <exclusion>
                            <groupId>com.vaadin</groupId>
                            <artifactId>vaadin-dev</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.vaadin</groupId>
                        <artifactId>vaadin-maven-plugin</artifactId>
                        <version>${vaadin.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>build-frontend</goal>
                                </goals>
                                <phase>compile</phase>
                            </execution>
                        </executions>
                        <configuration> 
                            <forceProductionBuild>true</forceProductionBuild> 
                            <ciBuild>true</ciBuild>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>it</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>

                </plugins>
            </build>
        </profile>

    </profiles>
</project>

Try to run maven with -X flag, maybe it provides additional information about the error (mvn install -X).

One potential issue could be using Java preview features without having the --enable-preview flag enabled.
See the following related issues on github:

Also, if you are using Vaadin Flow, there’s no need to run node manually.
Flow will install needed npm packages automatically.

Hello,

As you suggested, I added --enable-preview, but the issue persists.

    <build>
        <defaultGoal>spring-boot:run</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <configuration>
                    <jvmArguments>--enable-preview</jvmArguments>
                </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>

When I run mvn install -X, I get the following result:

[DEBUG] Classes reachable from com.vaadin.flow.theme.lumo.Lumo: [com.vaadin.flow.component.dependency.NpmPackage, com.vaadin.flow.component.dependency.NpmPackage$Container, com.vaadin.flow.theme.AbstractTheme, com.vaadin.flow.component.dependency.JsModule, com.vaadin.flow.theme.lumo.Lumo, com.vaadin.flow.component.dependency.JsModule$Container]
[DEBUG] Reading default values for com.vaadin.flow.component.dependency.NpmPackage
[DEBUG] Default values for com.vaadin.flow.component.dependency.NpmPackage: {dev=false}
[DEBUG] Can't load class org.vaddon.ClientMediaQuery
java.lang.NoClassDefFoundError: com/vaadin/flow/component/polymertemplate/PolymerTemplate
    at java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1012)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:150)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:524)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:427)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:421)
    at java.security.AccessController.doPrivileged (AccessController.java:712)
    at java.net.URLClassLoader.findClass (URLClassLoader.java:420)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:587)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:520)
    at com.vaadin.flow.server.scanner.ReflectionsClassFinder$LoggingReflections.forClass (ReflectionsClassFinder.java:158)
    at org.reflections.Reflections.lambda$getTypesAnnotatedWith$12 (Reflections.java:405)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:178)
    at java.util.Iterator.forEachRemaining (Iterator.java:133)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining (Spliterators.java:1845)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at org.reflections.util.QueryFunction.lambda$filter$3 (QueryFunction.java:32)
    at org.reflections.util.QueryFunction.lambda$add$9 (QueryFunction.java:66)
    at org.reflections.util.QueryFunction.lambda$add$9 (QueryFunction.java:66)
    at org.reflections.util.QueryFunction.lambda$asClass$13 (QueryFunction.java:89)
    at org.reflections.Reflections.get (Reflections.java:365)
    at org.reflections.Reflections.getTypesAnnotatedWith (Reflections.java:403)
    at com.vaadin.flow.server.scanner.ReflectionsClassFinder.getAnnotatedClasses (ReflectionsClassFinder.java:73)
    at com.vaadin.flow.server.frontend.scanner.ClassFinder$CachedClassFinder.lambda$getAnnotatedClasses$0 (ClassFinder.java:154)
    at java.util.HashMap.computeIfAbsent (HashMap.java:1220)
    at com.vaadin.flow.server.frontend.scanner.ClassFinder$CachedClassFinder.getAnnotatedClasses (ClassFinder.java:153)
    at com.vaadin.flow.server.frontend.scanner.ClassFinder.getAnnotatedClasses (ClassFinder.java:199)
    at com.vaadin.flow.server.frontend.scanner.FrontendDependencies.computePackages (FrontendDependencies.java:640)
    at com.vaadin.flow.server.frontend.scanner.FrontendDependencies.<init> (FrontendDependencies.java:165)
    at com.vaadin.flow.server.frontend.scanner.FrontendDependenciesScanner$FrontendDependenciesScannerFactory.createScanner (FrontendDependenciesScanner.java:95)
    at com.vaadin.flow.server.frontend.NodeTasks.<init> (NodeTasks.java:124)
    at com.vaadin.flow.plugin.base.BuildFrontendUtil.runNodeUpdater (BuildFrontendUtil.java:332)
    at com.vaadin.flow.plugin.maven.BuildFrontendMojo.execute (BuildFrontendMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: java.lang.ClassNotFoundException: com.vaadin.flow.component.polymertemplate.PolymerTemplate
    at java.net.URLClassLoader.findClass (URLClassLoader.java:445)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:587)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:520)
    at java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1012)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:150)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:524)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:427)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:421)
    at java.security.AccessController.doPrivileged (AccessController.java:712)
    at java.net.URLClassLoader.findClass (URLClassLoader.java:420)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:587)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:520)
    at com.vaadin.flow.server.scanner.ReflectionsClassFinder$LoggingReflections.forClass (ReflectionsClassFinder.java:158)
    at org.reflections.Reflections.lambda$getTypesAnnotatedWith$12 (Reflections.java:405)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:178)
    at java.util.Iterator.forEachRemaining (Iterator.java:133)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining (Spliterators.java:1845)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at org.reflections.util.QueryFunction.lambda$filter$3 (QueryFunction.java:32)
    at org.reflections.util.QueryFunction.lambda$add$9 (QueryFunction.java:66)
    at org.reflections.util.QueryFunction.lambda$add$9 (QueryFunction.java:66)
    at org.reflections.util.QueryFunction.lambda$asClass$13 (QueryFunction.java:89)
    at org.reflections.Reflections.get (Reflections.java:365)
    at org.reflections.Reflections.getTypesAnnotatedWith (Reflections.java:403)
    at com.vaadin.flow.server.scanner.ReflectionsClassFinder.getAnnotatedClasses (ReflectionsClassFinder.java:73)
    at com.vaadin.flow.server.frontend.scanner.ClassFinder$CachedClassFinder.lambda$getAnnotatedClasses$0 (ClassFinder.java:154)
    at java.util.HashMap.computeIfAbsent (HashMap.java:1220)
    at com.vaadin.flow.server.frontend.scanner.ClassFinder$CachedClassFinder.getAnnotatedClasses (ClassFinder.java:153)
    at com.vaadin.flow.server.frontend.scanner.ClassFinder.getAnnotatedClasses (ClassFinder.java:199)
    at com.vaadin.flow.server.frontend.scanner.FrontendDependencies.computePackages (FrontendDependencies.java:640)
    at com.vaadin.flow.server.frontend.scanner.FrontendDependencies.<init> (FrontendDependencies.java:165)
    at com.vaadin.flow.server.frontend.scanner.FrontendDependenciesScanner$FrontendDependenciesScannerFactory.createScanner (FrontendDependenciesScanner.java:95)
    at com.vaadin.flow.server.frontend.NodeTasks.<init> (NodeTasks.java:124)
    at com.vaadin.flow.plugin.base.BuildFrontendUtil.runNodeUpdater (BuildFrontendUtil.java:332)
    at com.vaadin.flow.plugin.maven.BuildFrontendMojo.execute (BuildFrontendMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  42.699 s
[INFO] Finished at: 2024-05-07T15:05:08+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.vaadin:vaadin-maven-plugin:24.3.2:build-frontend (default) on project cevher-tsys-web: Could not execute build-frontend goal: Error occured during goal execution: Cannot invoke "java.lang.Class.isInterface()" because the return value of "org.reflections.Reflections.forClass(String, java.lang.ClassLoader[])" is nullPlease run Maven with the -e switch (or Gradle with the --stacktrace switch), to learn the full stack trace. -> [Help 1]

Polymer is no longer supported. Do you use Polymer templates or use a 3rd party component that is not compatible with Vaadin 24

1 Like

I removed the following dependency and my issue was resolved.

<dependency>
     <groupId>com.github.appreciated</groupId>
     <artifactId>vaadin-css-grid</artifactId>
     <version>2.0.0</version>
 </dependency>

There is a new version that works with 24