jol报错NoClassDefFoundError

当maven依赖设置为scope=provided时,该依赖只在编译和测试阶段可用,运行时不会包含。文章中提到的异常NoClassDefFoundError是因为在运行阶段缺少org.openjdk.jol.info.ClassLayout类。解决方法是将依赖的scope改为默认的compile,确保运行时包含所需jar包。
摘要由CSDN通过智能技术生成

maven依赖

<dependency>
            <groupId>org.openjdk.jol</groupId>
            <artifactId>jol-core</artifactId>
            <version>0.16</version>
            <scope>provided</scope>
        </dependency>

报错信息

Exception in thread "main" java.lang.NoClassDefFoundError: org/openjdk/jol/info/ClassLayout
	at object.TestObject.main(TestObject.java:18)
Caused by: java.lang.ClassNotFoundException: org.openjdk.jol.info.ClassLayout
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more

代码
在这里插入图片描述

原因

scope=provided的情况,则可以认为这个provided是目标容器已经provide这个jar。换句话说,它只影响到编译,测试阶段。而在运行阶段,假定目标的容器(比如我们这里的tomcat容器)已经提供了这个jar包,app可以直接使用容器提供的jar,所以无需我们打包对应的jar包了。

相当于,运行时不会找 provided 修饰的依赖。

解决

移除 <scope>provided</scope> 即可,使用默认的 scope=compile

对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个jar包在classpath中。

————————————————
版权声明:本文为CSDN博主「架构师的小跟班」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44730681/article/details/115015445

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值