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

Tomcat环境下运行Vaadin 14应用的配置要求及启动异常排查

咱们一步步拆解你的问题,先解决导致Tomcat启动失败的核心异常,再搞定Maven部署的连接问题,最后梳理Vaadin 14在Tomcat上运行的必要配置。

一、先解决Tomcat启动时的ZipException异常

从你提供的完整栈追踪来看,最底层的错误是java.util.zip.ZipException: error in opening zip file——这说明Tomcat在加载Web资源时,某个JAR包损坏、缺失,或者权限不足导致无法读取。

  • 强制刷新依赖,修复损坏的JAR
    首先执行Maven命令强制更新依赖并重新构建:

    mvn clean install -U
    

    这个命令会清除本地仓库中可能损坏的依赖包,重新从Maven仓库下载完整的版本。之后检查项目target/WEB-INF/lib目录下的JAR文件,确保没有大小为0字节或者异常的文件,如果有,手动删除后再重新构建。

  • 检查Tomcat运行权限
    如果Tomcat的运行用户没有足够的读写权限访问项目的部署目录,也会触发这个错误:

    • 确保Tomcat运行用户对webapps下的应用文件夹有读写权限;
    • 如果你是在Eclipse中部署,检查Servers文件夹下的Tomcat实例目录权限,保证Eclipse能正常读写该目录。
  • 排除Servlet API依赖冲突
    Vaadin 14依赖Servlet 3.1+,而Tomcat 8.0自带的Servlet API版本可能和Vaadin的依赖冲突。在pom.xml中确保Servlet API依赖是provided scope(因为Tomcat已经自带,不需要打包到WAR中):

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    

    同时检查pom.xml中是否有重复引入Servlet API的情况,避免版本不一致。

二、解决mvn tomcat:deploy的连接拒绝错误

这个问题是因为插件和命令不匹配,加上Tomcat Manager没有配置正确的权限:

  • 使用正确的Maven插件命令
    你在pom.xml中引入的是tomcat8-maven-plugin,但执行的是旧插件的tomcat:deploy命令,应该改用:

    mvn tomcat8:deploy
    
  • 配置Tomcat Manager的部署权限
    要让Maven插件能部署到Tomcat,需要在Tomcat的conf/tomcat-users.xml中添加一个拥有部署权限的用户:

    <user username="deploy-user" password="deploy-pass" roles="manager-gui,manager-script"/>
    
  • 完善插件配置
    在pom.xml中补充tomcat8-maven-plugin的连接配置,指定Tomcat的地址、部署路径等:

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat8-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <url>http://localhost:8080/manager/text</url>
            <server>TomcatDeployServer</server>
            <path>/SimpleVaadin14GuiApp</path>
        </configuration>
    </plugin>
    

    然后在你的Mavensettings.xml(通常在~/.m2/settings.xml或者Maven安装目录的conf/settings.xml)中添加对应的服务器凭证:

    <servers>
        <server>
            <id>TomcatDeployServer</id>
            <username>deploy-user</username>
            <password>deploy-pass</password>
        </server>
    </servers>
    

三、Vaadin 14在Tomcat运行的必要配置

除了上面的修复,还要确保这些关键配置到位:

  • 指定打包类型为WAR
    在pom.xml中明确设置打包方式为war,因为Vaadin 14 Web应用需要以WAR包形式部署到Tomcat:

    <packaging>war</packaging>
    
  • 升级Tomcat版本
    Vaadin 14.6.5官方推荐使用Tomcat 8.5+或者9.x,你当前用的Tomcat 8.0.45版本偏低,对Servlet 4.0的支持不够完善,建议升级到Tomcat 8.5.x系列,避免兼容性问题。

  • 可选:自定义Vaadin Servlet配置
    Vaadin 14会自动注册Servlet,但如果需要自定义(比如修改URL模式),可以添加:

    @WebServlet(urlPatterns = "/*", name = "VaadinAppServlet", asyncSupported = true)
    @VaadinServletConfiguration(productionMode = false, ui = MainView.class)
    public class VaadinAppServlet extends VaadinServlet {
    }
    

    这一步不是必须的,但如果有特殊需求可以手动配置。

  • PWA配置检查
    你的代码中使用了@PWA注解,确保src/main/resources/META-INF/manifest.webmanifest文件存在(Vaadin会自动生成,但如果部署时出现资源缺失,可以手动检查该文件是否在WAR包的对应目录中)。

最后总结修复步骤

  1. 升级Tomcat到8.5.x或9.x版本,保证和Vaadin 14兼容;
  2. 执行mvn clean install -U重新构建,修复损坏的依赖JAR;
  3. 配置Tomcat Manager的用户权限,修正Maven插件的命令和配置;
  4. 确保pom.xml中Servlet API依赖为provided scope,避免冲突;
  5. 重启Tomcat,使用mvn tomcat8:deploy重新部署应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:12:47