使用Tbroyer GWT Maven插件与Errai框架配置Super Dev Mode遇类缺失错误
问题分析
使用Tbroyer的gwt-maven-plugin启动Super Dev Mode时,只要在GWT模块中添加<inherits name="org.jboss.errai.enterprise.All" />,就会触发javax.servlet.Servlet的ClassNotFoundException。原因是Errai Enterprise模块依赖Servlet API,但默认情况下Servlet API依赖的scope是provided,Super Dev Mode运行时无法在classpath中找到该类。
解决方案
- 调整Servlet API依赖范围
在客户端模块的pom.xml中,将Servlet API依赖的scope改为runtime(避免影响编译时依赖):
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>runtime</scope> </dependency>
- 配置gwt-maven-plugin的类路径
如果不想修改依赖scope,可以在插件配置中指定包含runtime依赖的类路径,或者显式添加Servlet API到额外类路径:
<plugin> <groupId>net.ltgt.gwt.maven</groupId> <artifactId>gwt-maven-plugin</artifactId> <version>1.0.1</version> <configuration> <moduleName>你的GWT模块全称</moduleName> <!-- 让codeserver使用compile+runtime范围的依赖 --> <classpathScope>compile+runtime</classpathScope> <!-- 或者单独添加Servlet API依赖 --> <extraClasspath> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> </extraClasspath> </configuration> </plugin>
- 统一管理依赖版本
如果项目中存在Servlet API版本冲突,在主pom.xml的<dependencyManagement>中统一版本:
<dependencyManagement> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> </dependencies> </dependencyManagement>
内容的提问来源于stack exchange,提问作者djasy3
相关产品推荐
相关产品推荐

