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

部署Java Servlet到AWS EC2时遇NoClassDefFoundError问题求助

问题解决:Java Servlet部署到EC2时的NoClassDefFoundError错误

错误原因

执行java -jar tinder-app-final.jar时出现NoClassDefFoundError: org/eclipse/jetty/server/Handler,核心原因是你生成的jar包仅包含自身业务代码,未打包Jetty等依赖库。默认Maven打包生成的是"瘦jar",运行时无法找到依赖类。

解决方案:修改pom.xml构建可执行Fat Jar

需要通过Maven插件将所有依赖合并到同一个jar中,推荐使用maven-shade-plugin,修改后的pom.xml构建部分如下:

<build>
    <plugins>
        <!-- 替换原有插件,添加shade插件实现依赖打包 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>tinder.ServerApp</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <finalName>tinder-app-final</finalName>
</build>

操作步骤

  • 本地修改pom.xml后,执行mvn clean package重新打包
  • 将target目录下新生成的tinder-app-final.jar上传到EC2实例
  • 再次执行java -jar tinder-app-final.jar启动应用

补充说明

  • 也可以使用maven-assembly-plugin实现相同效果,配置逻辑类似,核心都是将依赖合并到主jar中
  • 打包前确保本地Maven已正常下载所有依赖,无依赖缺失情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:10:21