栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java.lang.NoClassDefFoundError 包引入了还是报错未找到

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java.lang.NoClassDefFoundError 包引入了还是报错未找到

问题描述

明明包已经引入了,但是还是报错NoClassDefFoundError
❓❓❓

问题分析

这个问题要分析一下java运行的机制了
首先java代码编译成class字节码文件
然后JVM解释字节码文件运行程序
总的来说就是分为编译阶段和运行阶段

我是如何管理这些jar包的呢? 通过maven,如下

    
      org.apache.spark
      spark-core_${scala.compat.version}
      2.3.2
      provided
    

引入的时候有个**scope属性,**问题关键就出在了这里
首先说一下scope都与哪些吧

  • compile 不写的话默认就是这个,编译运行测试都起作用
  • provided 期望JDK,容器或者使用者提供,如servlet.jar,打包的时候不会打包进去,最后运行的时候环境会提供jar包
  • runtime 只在运行时使用,例如jdbc驱动,运行和测试起作用
  • test 只有在测试编译和测试运行阶段可用。
  • system 引用本地的jar包,maven不会在仓库中查找它

问题原因:
☀️☀️☀️
idea不会在main方法运行的时候依赖provide范围的jar包,也就是编译可以通过,但是运行不会通过
☀️☀️☀️

问题解决

方法一:(推荐)


  • 方法二:
    将对于依赖的scope标签去掉,但是不推荐这么做,这样会使得打包出来的文件非常大

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号