Dropwizard 1.3集成dropwizard-swagger出现ClassNotFoundException问题求助
解决Dropwizard 1.3 + dropwizard-swagger 1.3.0-1的ClassNotFoundException问题
我之前也碰到过一模一样的问题,根源确实是dropwizard-swagger依赖的glassfish相关组件间接引入了可选的ZeroTurnaround JRebel依赖,但你的运行环境里并没有部署这个热部署工具库,所以才抛出了ClassNotFoundException: org.zeroturnaround.javarebel.ClassEventListener。
直接的解决方法是在Maven依赖中排除掉这个不必要的传递依赖:
<dependency> <groupId>com.smoketurner</groupId> <artifactId>dropwizard-swagger</artifactId> <version>1.3.0-1</version> <exclusions> <!-- 排除导致ClassNotFound的JRebel依赖 --> <exclusion> <groupId>org.zeroturnaround</groupId> <artifactId>javarebel</artifactId> </exclusion> </exclusions> </dependency>
问题原因拆解
dropwizard-swagger依赖的glassfish部分模块(比如javax.servlet相关包)将JRebel标记为可选依赖,但Maven默认会下载可选依赖(除非你配置了特殊的依赖处理策略)。而JRebel是用于Java应用热重载的工具,大部分开发或生产环境中都不会引入这个库,自然就会出现类找不到的异常。
额外排查小技巧
如果你不确定是哪个依赖路径引入了JRebel,可以运行Maven的依赖树命令精准定位:
mvn dependency:tree -Dincludes=org.zeroturnaround:javarebel
这个命令会输出所有引入该依赖的链路,确保你排除的位置是准确的。
内容的提问来源于stack exchange,提问作者user_mda
相关产品推荐
相关产品推荐

