Maven导入Gson后JSP/Servlet Web部署出现NoClassDefFoundError求助
解决java.lang.NoClassDefFoundError: com/google/gson/Gson问题
这个错误在JSP/Servlet Web项目里非常常见,核心原因是Gson的依赖jar包没有被部署到Tomcat的运行环境中——虽然你已经在pom.xml里声明了Gson依赖,但Maven并没有把它打包到Web项目的WEB-INF/lib目录下,导致Tomcat运行时找不到对应的类。
下面是具体的排查和解决步骤:
1. 确认项目打包方式
你的pom.xml里没有指定<packaging>标签,Maven默认会打成jar包,但Web项目需要打成war包才能正确将依赖纳入WEB-INF/lib。在pom.xml的<version>标签后添加:
<packaging>war</packaging>
2. 优化重复的JUnit依赖
注意到你的pom.xml里重复声明了JUnit依赖,这可能导致不必要的冲突,建议保留其中一个即可,比如只保留测试范围的:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.4.0</version> <scope>test</scope> </dependency>
3. 确保Maven打包时复制依赖到WEB-INF/lib
如果打包后war包的WEB-INF/lib里还是没有Gson的jar,可以显式配置maven-war-plugin来强制复制依赖。在pom.xml里添加<build>节点:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <configuration> <webResources> <resource> <directory>${project.build.directory}/dependency</directory> <targetPath>WEB-INF/lib</targetPath> </resource> </webResources> </configuration> </plugin> </plugins> </build>
之后执行mvn clean install重新打包项目。
4. 检查IDE的部署配置
如果用IDE(比如IDEA/Eclipse)直接部署到Tomcat,需要确认部署配置里包含了Maven依赖:
- IDEA:打开
File > Project Structure > Artifacts,选中你的war包,确保WEB-INF/lib下存在gson-2.8.5.jar,如果没有,点击+选择Library Files添加Gson依赖。 - Eclipse:右键项目选择
Properties > Deployment Assembly,确认Maven Dependencies在部署列表中,若没有则点击Add > Maven Dependencies添加。
5. 清理并重新部署
最后执行以下操作确保环境干净:
- 执行
mvn clean清理旧的构建文件 - 重新执行
mvn install打包项目 - 重启Tomcat并重新部署war包
这样就能解决Tomcat运行时找不到Gson类的问题了。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

