GWT Maven项目SuperDev Mode异常:启动Jetty 6而非默认Jetty 8求助
我之前在维护GWT Maven项目时也碰到过一模一样的问题——SuperDev Mode莫名拉起Jetty 6,明明GWT版本对应的是Jetty 8/9,排查了好久才解决,给你几个实用的排查和修复方向:
1. 用Maven命令揪出Jetty 6的依赖来源
你说找不到加载Jetty 6的地方,其实Maven自带的依赖分析工具能帮你精准定位:
- 执行
mvn dependency:tree -Dincludes=org.mortbay.jetty,因为Jetty 6的groupId是org.mortbay.jetty,而Jetty 8+的groupId是org.eclipse.jetty,这条命令会过滤出所有引入Jetty 6的依赖链。 - 如果输出结果不明确,再试试
mvn dependency:analyze,它会帮你检查是否有未声明的间接依赖,可能能找到隐藏的Jetty 6引用。
2. 强制排除Jetty 6依赖
一旦找到引入Jetty 6的那个依赖,直接在pom.xml里排除它的所有Jetty 6相关子依赖:
<dependency> <!-- 这里替换成你找到的引入Jetty6的依赖 --> <groupId>com.example</groupId> <artifactId>problematic-dependency</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>org.mortbay.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
另外,建议在dependencyManagement节点里统一声明Jetty的版本,确保GWT自带的Jetty版本被优先使用:
<dependencyManagement> <dependencies> <!-- GWT 2.7对应Jetty 8,GWT 2.8对应Jetty 9 --> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>8.1.19.v20160209</version> </dependency> </dependencies> </dependencyManagement>
3. 检查GWT Maven插件的配置
很多时候问题出在GWT插件的版本或配置上:
- 确保
gwt-maven-plugin的版本和你的GWT版本完全匹配(比如GWT 2.7对应插件2.7.0,GWT 2.8对应2.8.2),插件本身会引入对应的Jetty依赖,版本不匹配就可能拉错Jetty。 - 检查插件的
<configuration>里有没有手动指定Jetty服务器类,比如如果有<server>org.mortbay.jetty.Server</server>,赶紧改成Jetty 8/9的类:org.eclipse.jetty.server.Server。
4. 清理Maven缓存并重新构建
本地Maven仓库的缓存有时候会搞鬼,比如旧的依赖没更新:
- 执行
mvn clean install -U,-U参数会强制更新所有快照和依赖,确保本地仓库里的jar都是最新的。 - 如果是用IDE(IntelliJ/Eclipse)开发,记得刷新Maven项目,让IDE同步最新的依赖配置。
5. 调试类加载过程(终极方案)
如果以上方法都找不到问题,直接跟踪类加载过程:
- 启动SuperDev Mode时添加VM参数:
-verbose:class - 查看启动日志,找到
org.mortbay.jetty.Server的加载记录,日志里会显示这个类是从哪个jar包加载的,比如:
拿到这个jar包的路径后,再回到Maven依赖树里找它的引入来源,就能精准定位问题了。[Loaded org.mortbay.jetty.Server from file:/Users/xxx/.m2/repository/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26.jar]
内容的提问来源于stack exchange,提问作者jan
相关产品推荐
相关产品推荐

