Spring应用在JBOSS中部署失败但在Tomcat中正常运行求助
JBOSS部署WAR失败?Tomcat正常运行的排查方案
兄弟,Tomcat跑顺风顺水,到JBOSS就卡壳,这种容器差异的坑我踩过不少,给你整理几个核心排查方向,大概率能揪出问题:
1. 先搞定pom.xml的依赖冲突
JBOSS自带了一堆容器级别的库(比如Servlet API、JSP API、JPA实现这些),你项目里要是重复引入了同款依赖,十有八九会和JBOSS的自带库打架,直接导致部署失败。
- 给这些容器已经提供的依赖加上
<scope>provided</scope>,告诉Maven“这玩意儿JBOSS已经有了,别打包进去”,比如:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
- 另外留意依赖版本:比如你用JBOSS EAP 7.x的话,对应Java EE 7/8,别瞎引入Java EE 9+的依赖,版本不兼容直接炸。
2. 确认web.xml的版本适配性
JBOSS对web.xml的版本要求比Tomcat严多了,不同版本的JBOSS对应不同的Servlet规范,别用错了:
- 比如JBOSS EAP 7.x对应Servlet 3.1,你的web.xml得这么声明:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
- 别抱着老掉牙的Servlet 2.5版本不放,除非你的JBOSS是古董级的。
3. 别用Eclipse导出WAR,改用Maven打包
Eclipse的“导出WAR”功能经常不靠谱,容易漏依赖或者打包不完整,建议用Maven命令正经打包:
- 打开终端,到项目根目录执行:
mvn clean package,生成的WAR在target文件夹里,拿这个去部署JBOSS。 - 顺便检查下pom.xml里的
<packaging>是不是设成了war,别写成jar了。
4. 看JBOSS日志!这是排查核心
部署失败的根因100%藏在JBOSS的日志里,别瞎猜,去JBOSS安装目录找:
- 独立模式看
standalone/log/server.log,域模式看domain/log/server.log - 常见错误比如
ClassNotFoundException(依赖缺了或者冲突了)、NoClassDefFoundError(类加载打架)、DeploymentException(配置文件写错了),对着日志提示改就行。
5. 检查JBOSS自身的配置
- 先确认JBOSS的端口没被占,比如默认8080要是被Tomcat占了,直接启动失败更别说部署了。
- 要是你项目用到了数据源、JMS这些资源,得确保JBOSS的
standalone.xml或domain.xml里已经配置好了对应的资源,不然项目找不到也会部署失败。
内容的提问来源于stack exchange,提问作者Vishal Hatti
相关产品推荐
相关产品推荐

