Vaadin+Spring Boot项目在Windows Server启动失败(Webpack异常)
问题:Vaadin + Spring Boot项目部署Windows Server出现Webpack异常
我开发了一个基于Vaadin和Spring Boot的网站,本地运行生成的jar包正常,但部署到Windows Server服务器时出现500错误,显示白标错误页面,核心异常如下:
白标错误页面 此应用未对/error设置显式映射,因此显示此回退页面。 2022年8月29日 星期一 12:05:00 CEST 发生意外错误(类型=内部服务器错误,状态=500)。 java.lang.IllegalStateException: Webpack exited prematurely com.vaadin.flow.server.ServiceException: java.lang.IllegalStateException: Webpack exited prematurely at com.vaadin.flow.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1617) at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1580) at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:299) at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:109) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalStateException: Webpack exited prematurely at com.vaadin.base.devserver.AbstractDevServerRunner.doStartDevModeServer(AbstractDevServerRunner.java:218) at com.vaadin.base.devserver.AbstractDevServerRunner.runOnFutureComplete(AbstractDevServerRunner.java:170) at com.vaadin.base.devserver.AbstractDevServerRunner.lambda$new$0(AbstractDevServerRunner.java:161) at java.util.concurrent.CompletableFuture.uniWhenComplete(Unknown Source) at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(Unknown Source) at java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source) at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
项目信息
- Maven配置:
<properties> <java.version>1.8</java.version> <vaadin.version>22.0.21</vaadin.version> </properties>
- 服务器环境:Microsoft Windows Server 2022 Standard
目前无法定位错误原因。
解决方案
1. 确保以生产模式部署
Vaadin开发模式会自动启动Webpack dev server,生产环境必须预构建前端资源:
- 打包时直接构建生产包:执行
mvn clean package -Pproduction,部署生成的jar - 启动jar时指定生产配置:
java -jar your-app.jar --spring.profiles.active=prod
2. 检查Node.js环境(仅开发模式需要)
如果意外以开发模式运行,服务器需安装Node.js:
- Vaadin 22建议安装Node.js 14.x或16.x版本
- 确认Node和npm命令在系统PATH中可直接调用
3. 排查权限与端口问题
- 运行jar的用户需对应用目录有读写权限,Webpack需要生成临时文件
- 检查服务器防火墙、安全软件是否阻止Webpack启动或占用端口
4. 获取详细日志定位问题
在application.properties中添加日志配置:
logging.level.com.vaadin=DEBUG
启动应用后查看日志,找到Webpack启动失败的具体输出信息
5. 清理前端缓存后重新打包
本地清理前端资源后重新构建生产包:
mvn clean vaadin:clean-frontend package -Pproduction
再将新jar部署到服务器
内容的提问来源于stack exchange,提问作者Till Glöckner
相关产品推荐
相关产品推荐

