服务器部署 springboot 项目报错 ClassNotFoundException 如何解决?

springboot 项目在 idea 中可以正常运行,通过 maven 打包后,将配置文件和打包的文件都导入服务器,运行后出现如下错误:

Exception in thread "main" java.lang.ClassNotFoundException: com.example.demo.DemoApplication
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:467)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

经过查询后疑似 jdk 版本过低,重装后仍报以上错误,该如何解决?

阅读 5.5k
3 个回答

最好将你的pom.xml贴上来。这个基本能确定是maven打包有问题。

你可以尝试将打包后的jar/war包解压出来看看。

image.png

查看包内是否已实际打包。

pom.xmlbuild示例

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>16</source>
                <target>16</target>
            </configuration>
        </plugin>
    </plugins>
</build>

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

用maven的插件spring-boot-maven-plugin来打包

  1. 检查在本地你的jar是否运行正常,如果可以,那排除jar包问题,线上可以重新部署一下环境,如果本地也运行不了,进入第二步。
  2. 解压jar包,看一下内部是否有BOOT-INF/classes下有没有你的启动类,如果有,检查对应路径是否正确,如果没有,重新打包测试。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题