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

使用xsbt-web-plugin运行WAR时依赖缺失及配置报错求助

解决xsbt-web-plugin运行WAR时的依赖缺失与JMX警告问题

嘿,我来帮你搞定这个问题!你遇到的核心问题是依赖范围配置错误加上插件的运行命令用错了,咱们一步步拆解解决:

1. 修正依赖范围,让运行时能拿到关键jar包

你提到的两个依赖,tomcat-jdbc-pool和javax.servlet-api的范围不能一概而论:

  • javax.servlet-api:用Provided是对的,因为webapp-runner本身会自带这个API,不需要打包到WAR里;
  • tomcat-jdbc-pool:绝对不能用Provided!webapp-runner不会自带这个连接池组件,必须让它出现在运行时类路径里,所以得用Runtime或者Compile范围。

在你的build.sbt里这么配置:

// Servlet API 由webapp-runner提供,标记为Provided
libraryDependencies += "javax.servlet" % "javax.servlet-api" % "4.0.1" % Provided

// Tomcat连接池需要在运行时可用,标记为Runtime
libraryDependencies += "org.apache.tomcat" % "tomcat-jdbc-pool" % "9.0.65" % Runtime

2. 用正确的命令启动web容器

你说的container配置不存在,是因为新版的xsbt-web-plugin已经废弃了这个旧配置,现在要用web前缀的任务。首先确保你的project/plugins.sbt里引入了对应sbt版本的插件(比如sbt 1.x用4.x版本的插件):

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.2.0")

然后启动应用的正确命令是:

sbt web:run

这个命令会自动把你标记为Runtime的依赖(比如tomcat-jdbc-pool)加入到webapp-runner的类路径里,不会再出现找不到类的问题。

3. 消除JMX注册失败的警告

那个JMX警告的根源就是tomcat-jdbc-pool没在运行时类路径里,导致DataSourceFactory找不到。按照上面的依赖配置调整后,这个警告会自动消失,因为连接池组件已经能被正确加载了。

额外检查项

  • 如果你用了sbt-assembly打包WAR,要确保assembly配置没有排除Runtime范围的依赖;
  • 要是你以后手动部署WAR到外部Tomcat容器,可以把tomcat-jdbc-pool放到Tomcat的lib目录下,这时再把它的依赖范围改成Provided就行,但用webapp-runner运行时必须保持Runtime。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:43:40