You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 14应用配置Java 9+后Tomcat生产构建无法正常运行求助

Vaadin 14 适配 Java 9+ 并在 Tomcat 正常运行的配置方案
  • 确认Vaadin版本兼容性
    确保使用Vaadin 14的最新维护分支版本(如14.10.x及以上),旧的小版本可能存在Java 9+的兼容瑕疵,官方维护分支已修复相关模块适配问题。

  • 修正Maven编译配置
    仅设置source和target不足以保证Java 9+的字节码兼容性,必须添加release参数,确保编译产物符合指定Java版本的规范。完整的maven-compiler-plugin配置如下:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <source>9</source>
            <target>9</target>
            <release>9</release>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
    

    同时可以保留<java.version>9</java.version>的properties配置,让其他插件(如Spring Boot插件)自动对齐版本。

  • 配置Tomcat的JVM模块访问权限
    Java 9+的模块系统默认限制了对JDK内部模块的反射访问,而Vaadin运行依赖部分反射操作,需在Tomcat启动参数中开放相关权限:

    • Linux环境:编辑TOMCAT_HOME/bin/catalina.sh,在文件开头添加:
      JAVA_OPTS="$JAVA_OPTS --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED"
      
    • Windows环境:编辑TOMCAT_HOME/bin/catalina.bat,添加:
      set JAVA_OPTS=%JAVA_OPTS% --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED
      

    这个配置会允许未命名模块(即你的应用代码)访问JDK内部的核心模块,确保Vaadin的Servlet能正常初始化。

  • 验证Servlet映射与Tomcat运行环境

    • 确保Vaadin的Servlet(SpringServlet或VaadinServlet)映射路径为/*,避免请求被静态资源处理器拦截。
    • 确认Tomcat运行的JVM版本为OpenJDK 11,可通过catalina.out中的启动日志查看JVM版本信息,避免部署到Java 8环境。
  • 清理构建缓存重新打包
    执行mvn clean package彻底清理旧的编译产物,确保所有类文件都是基于Java 9编译生成的,避免混合字节码导致的隐性问题。

内容的提问来源于stack exchange,提问作者ZZerog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:24:55