You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:05:27