WildFly 11部署Vaadin CDI WAR包时出现Servlet部署错误
解决WildFly 11部署Vaadin CDI WAR包的启动失败问题
嘿,我之前也碰到过类似的WildFly部署Vaadin CDI项目的坑,看你给出的错误是Undertow部署服务启动失败,大概率是类加载或者兼容性的问题,给你整理几个针对性的排查和解决步骤:
1. 先确认版本兼容性
WildFly 11是基于Java EE 7的,你得确保用的Vaadin版本和它适配:
- Vaadin 8.x系列是专门适配Java EE 7的,要是你用了Vaadin 10及以上的Flow版本,那肯定会出问题——因为Vaadin 10+依赖Java EE 8的特性,WildFly 11压根不支持。
- 去你的pom.xml(Maven项目)或者build.gradle里看看Vaadin的版本,换成8.14.x这类稳定的适配版本试试。
2. 检查CDI依赖的配置
Vaadin CDI的依赖很容易踩冲突的坑:
- 首先得确保你引入了
vaadin-cdi依赖,而且别搞混了依赖范围——WildFly自带CDI容器,所以像cdi-api这类Java EE规范的依赖,一定要设成provided,别打包进WAR里,不然会和WildFly自带的类冲突。 - Maven依赖示例给你参考下:
<!-- Vaadin CDI核心依赖 --> <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-cdi</artifactId> <version>${vaadin.version}</version> </dependency> <!-- CDI API 设为provided,复用WildFly自带的 --> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <scope>provided</scope> </dependency> - 可以用
mvn dependency:tree命令拉一下依赖树,看看有没有重复引入的CDI、Servlet相关依赖,有的话用<exclusions>把多余的排除掉。
3. 排查WAR包里的重复类
你给出的错误截断了,但开头是java.lang.Class...,十有八九是重复类加载的问题:
- 把你的WAR包解压开,看看
WEB-INF/lib下面有没有WildFly已经自带的Jar包,比如cdi-api.jar、javax.servlet-api.jar这些,要是有,说明你把应该设为provided的依赖打包进去了,赶紧调整依赖范围。
4. 验证WildFly的CDI配置
虽然WildFly 11默认是开启CDI的,但也有可能配置被改了:
- 打开WildFly的
standalone/configuration/standalone.xml,找一下<subsystem>节点,看看有没有这行:
要是没有,加上它重启WildFly试试。<subsystem xmlns="urn:jboss:domain:cdi:2.0"/>
5. 找到完整的错误栈是关键
你提供的错误信息被截断了,java.lang.Class...后面肯定有具体的异常,比如ClassNotFoundException(找不到类)、NoClassDefFoundError(类依赖缺失)或者ClassCastException(类冲突导致类型转换错误),这些具体信息能直接定位问题:
- 去Eclipse的控制台或者WildFly的
standalone/log/server.log里找完整的错误日志,比如如果是找不到com.vaadin.cdi.VaadinCDIExtension,那就是你没加vaadin-cdi依赖;如果是类冲突,那就是重复打包了依赖。
6. 清理缓存,重新构建
有时候旧缓存会搞事情:
- 在Eclipse里右键项目,选
Clean...清理项目,然后重新构建。 - 把WildFly的
standalone/deployments下的相关部署文件删掉,再清空standalone/tmp和standalone/data里的缓存,重启WildFly后重新部署。
内容的提问来源于stack exchange,提问作者paoloo
相关产品推荐
相关产品推荐

