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

Linux下编译Spring Boot+Vaadin报openssl-legacy-provider错误

问题根因

报错本质是Vaadin前端构建阶段调用Webpack时,会自动向Node运行参数注入--openssl-legacy-provider参数,同Node版本下Linux报错、Windows正常,通常由两类原因导致:

  • Linux系统中安装的Node.js 16.15是发行版官方源经过安全裁剪/加固的版本,会直接拦截NODE_OPTIONS中传递的该OpenSSL相关参数,直接抛出错误终止进程;
  • 你执行unset NODE_OPTIONS仅对当前操作的终端会话生效,通过IDE、系统服务等方式启动Spring Boot时,进程没有继承这个修改后的环境变量,且Vaadin自身的构建逻辑还是会自动注入该不被支持的参数。
解决方法

按优先级从高到低依次尝试即可:

  • 升级Vaadin到对应大版本的最新补丁版
    如果你使用的是Vaadin 22.1.x、23.0.x~23.2.x版本,直接升级到同系列最新补丁包即可。官方已经修复了错误给Node 16版本注入--openssl-legacy-provider参数的逻辑——这个参数本身是为Node 17+兼容旧版OpenSSL算法设计的,Node 16环境下完全不需要。
  • 显式关闭Vaadin的旧版OpenSSL兼容开关
    在项目的application.properties配置文件中添加如下配置,强制禁止Vaadin自动注入该参数:
    vaadin.legacy-provider-enabled=false
    
    如果是通过Maven命令行执行构建,也可以直接在pom.xml的vaadin-maven-plugin插件配置项中添加该参数,避免命令行打包时报错。
  • 替换系统源安装的Node为官方二进制版本
    卸载当前通过apt、dnf等系统包管理器安装的Node.js,改用Node.js官方发布的Linux二进制压缩包安装。官方编译的版本没有做NODE_OPTIONS参数的强制拦截,和Windows环境下的Node行为完全一致,即使碰到无效参数也只会输出警告,不会直接终止构建。
  • 临时降级Node版本到16.14.x
    Node 16.14及更早的16系列版本没有加入NODE_OPTIONS参数的强校验逻辑,即使Vaadin注入了无效参数,也只会打印警告日志,不会阻断前端编译流程。

注意:如果是通过IDEA等IDE启动项目,修改完系统环境变量后一定要重启IDE,IDE会缓存启动时读取到的系统环境变量,仅在终端中修改变量对IDE启动的进程不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:27:21