Maven多模块项目调用Core模块工具类出现NoClassDefFoundError问题
解决Maven多模块NoClassDefFoundError问题
问题原因
你遇到的NoClassDefFoundError是因为父POM中gson依赖的scope设置为provided,这个scope表示该依赖仅在编译和测试阶段有效,运行时不会被自动加入类路径。而Core模块的Util类在运行时需要实例化Gson,submodule1调用该方法时,类路径中缺少Gson类,导致报错。
解决方案
根据你的需求,有两种可行的修改方式:
方式一:移除provided scope(推荐,适用于本地运行场景)
修改父POM中的gson依赖,去掉provided标签(默认scope为compile,会自动传递到所有子模块,运行时也会包含该依赖):
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 移除<scope>provided</scope> --> </dependency> </dependencies>
方式二:在submodule1中显式添加gson依赖(适用于必须保留父pom provided的场景)
如果父POM的provided是必须保留的(比如该依赖由外部容器提供),但本地运行main方法需要这个依赖,可以在submodule1的POM中添加gson依赖,设置scope为compile:
<dependencies> <dependency> <groupId>org.example</groupId> <artifactId>core</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> <!-- 新增gson依赖 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <scope>compile</scope> </dependency> </dependencies>
验证修改
修改完成后,执行以下步骤确保生效:
- 执行
mvn clean install重新构建整个项目 - 再次运行submodule1的Main类,即可正常调用Util的静态方法
内容的提问来源于stack exchange,提问作者HarleyDavidson
相关产品推荐
相关产品推荐

