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

UberJar运行异常:IntelliJ Maven项目Jackson YAML报NoClassDefFoundError

解决Java运行时NoClassDefFoundError:Jackson YAMLFactory依赖未打包问题

我来帮你搞定这个问题!你碰到的NoClassDefFoundError根本原因是Maven没有真正把Jackson YAML的依赖打包进可执行JAR——看你的pom.xml,问题出在所有打包插件都放在了<pluginManagement>节点里,这个节点只是用来统一管理插件的版本和配置模板,并不会实际触发插件执行。

下面给你两个可行的解决方案,选一个就行:

方案1:用maven-shade-plugin(推荐,打包更灵活)

把shade插件从<pluginManagement>移到<build>下的<plugins>节点中,这样Maven才会在打包阶段执行它。修改后的pom.xml构建部分如下:

<build>
    <plugins>
        <!-- Java 1.8编译配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <!-- Shade插件:打包所有依赖到可执行JAR -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <!-- 配置主类,让JAR可直接运行 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>App</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

操作步骤:

  1. 执行命令:mvn clean package
  2. 去项目的target目录,找到App-1.0-SNAPSHOT.jar(这是Shade打包好的包含所有依赖的可执行JAR)
  3. 运行JAR:java -jar App-1.0-SNAPSHOT.jar

方案2:用maven-assembly-plugin

同样,把assembly插件移到<build><plugins>下,并且补充主类配置(原来的配置里没给assembly指定主类,这也是个小问题):

<build>
    <plugins>
        <!-- Java 1.8编译配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <!-- Assembly插件:生成带依赖的JAR -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <!-- 配置主类,让JAR可直接运行 -->
                <archive>
                    <manifest>
                        <mainClass>App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

操作步骤:

  1. 执行命令:mvn clean package
  2. 去target目录找App-1.0-SNAPSHOT-jar-with-dependencies.jar
  3. 运行JAR:java -jar App-1.0-SNAPSHOT-jar-with-dependencies.jar

关键提醒

  • 不要同时启用Shade和Assembly两个打包插件,选一个就好,避免生成多个JAR混淆
  • <pluginManagement>节点适合多模块项目统一管理插件配置,但单模块项目要执行的插件必须放到<build><plugins>下才会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:37:45