在java项目中运行main方法
提示:Exception in thread "main" java.lang.NoClassDefFoundError: cn/hutool/core/util/StrUtil
Connected to the target VM, address: '127.0.0.1:56133', transport: 'socket'
Exception in thread "main" java.lang.NoClassDefFoundError: cn/hutool/core/util/StrUtil
at com.demo2.controller.UsersController.main(UsersController.java:39)
Caused by: java.lang.ClassNotFoundException: cn.hutool.core.util.StrUtil
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
把整体项目运行起来就没有问题,单独运行java的main方法就是出现问题。
俺就安心的好好学习一下吧
NoClassDefFoundError和NoClassDefFoundExtension
同。
-
NoClassDefFoundError
:
这个异常通常发生在Java程序试图使用一个类,但是这个类在编译时是可用的,而在运行时却找不到。这可能是因为类文件在运行时没有被加载到类路径中,或者类文件在运行时已经被破坏或丢失。这个错误通常表明类路径设置不正确,或者类文件在编译和运行之间发生了变化。 -
NoClassDefFoundExtension
:
这个错误并不是Java中的一个标准异常,它看起来像是一个拼写错误或者是一个自定义的异常。如果你遇到了这个错误,它可能是由以下原因造成的:
- 拼写错误:可能是
NoClassDefFoundError
的拼写错误。 - 自定义异常:可能是某个特定的库或框架定义的自定义异常,用于表示类似的类定义问题。
- 其他错误:可能是由于其他原因导致的错误,但被错误地记录为
NoClassDefFoundExtension
。
解决思路
IntelliJ IDEA 配置错误
IntelliJ IDEA 的项目设置中类路径没有正确配置,JVM 无法找到项目的类或依赖项。
Maven 配置错误
Maven 使用名为 pom.xml
的文件来描述项目的配置和依赖关系。如果在 pom.xml
文件中出现错误,可能会导致 NoClassDefFoundError。
我的错误
我检查了我idea,是存在的。
检查Maven的依赖
子项目的依赖,没有版本号。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
所以在父类的项目中查看pom的 dependencyManagement中hutool的dependency
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
<scope>provided</scope>
</dependency>
中的scope是provided。为什么是它呢去掉了<scope>provided</scope>。
就可以正常运行了。
学习一maven的 scope属性吧。
maven的 scope
在Maven中,scope
是一个属性,用于定义依赖项在哪些阶段可用。Maven 提供了以下几种依赖范围:
-
compile
(默认)-
编译依赖在所有的阶段都可用。
-
如果一个依赖没有显式指定范围,那么它默认就是
compile
范围。
-
-
provided
-
提供依赖表示该依赖在编译和测试时需要,但在打包和运行时不需要。
-
通常用于那些在运行时由容器或运行环境提供的依赖,例如Servlet API。
-
-
runtime
-
运行时依赖在编译时不需要,但在运行时需要。
-
通常用于那些在运行时需要的库,例如JDBC驱动。
-
-
test
-
测试依赖只在测试阶段需要,不会包含在最终的打包中。
-
通常用于那些只在测试时需要的库,例如JUnit。
-
-
system
-
系统依赖与
provided
类似,但需要显式指定一个系统路径。 -
这个范围很少使用,因为它可能会引入安全问题。
-
-
import
-
导入依赖用于Maven的依赖管理,它允许你在一个pom文件中定义依赖,然后被其他pom文件导入。
-
-
optional
-
可选依赖表示该依赖可以被其他依赖使用,但不是必须的。
-
如果一个依赖被标记为
optional
,那么使用这个依赖的项目可以选择是否包含这个依赖。
-