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

Maven加载Gson库报错求助:NoClassDefFoundError问题排查

问题原因

你遇到的NoClassDefFoundError是因为默认Maven打包生成的jar仅包含你自己编写的代码,不包含依赖的Gson库文件。当用java -jar运行时,JVM只能找到你的主类,找不到Gson的类文件,因此抛出这个错误。

解决方案

以下是两种常用的解决方式,均通过Maven插件将依赖打包进可执行jar中:

方法一:使用maven-shade-plugin(推荐)

该插件会把所有依赖的类合并到你的jar里,生成一个包含所有代码的"胖jar"。

在pom.xml的<build>-><plugins>节点下添加如下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.5.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.example.App</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

执行打包命令:

mvn clean package

打包完成后,运行target目录下生成的同名jar:

java -jar target/my-api-app-1.0-SNAPSHOT.jar

方法二:使用maven-assembly-plugin

该插件会生成包含依赖的可执行jar,同时也会产出包含依赖的压缩包。

在pom.xml的<build>-><plugins>节点下添加:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.6.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.example.App</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

执行打包命令:

mvn clean package

打包后,target目录下会生成名为my-api-app-1.0-SNAPSHOT-jar-with-dependencies.jar的文件,运行它:

java -jar target/my-api-app-1.0-SNAPSHOT-jar-with-dependencies.jar

方法三:运行时手动指定classpath

如果不想打包依赖,也可以在运行时手动将Gson的jar加入classpath:

  1. 先执行mvn clean package生成普通jar
  2. 找到本地Maven仓库中的Gson jar(默认路径为~/.m2/repository/com/google/code/gson/gson/2.11.0/gson-2.11.0.jar)
  3. 运行命令:
java -cp target/my-api-app-1.0-SNAPSHOT.jar:/path/to/gson-2.11.0.jar com.example.App

(Windows系统将冒号替换为分号)

额外说明

你之前的Gson依赖配置是正确的,开发时IDE能识别依赖是因为IDE会自动将Maven依赖加入classpath,但打包后的普通jar不包含这些依赖,因此运行时需要额外处理。

内容的提问来源于stack exchange,提问作者Socrates

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:43:31