Maven中依赖包为provided,导致NoClassDefFoundError

9 篇文章 0 订阅

明明包引入了,却报类找不到,查找后发现pom文件中依赖包引入的方式

 

maven  pom.xml中dependency配置了<scope>provided<scope/>,运行时该依赖无效,导致异常

 但是在IDEA中,maven配置<scope>provided</scope>,依赖只作用于编译和打包等,但不能用于运行类。通俗的说,配置了<scope>provided</scope>,就是在告诉IDEA,你不要担心,我会在运行时提供这个依赖,但是实际上却并没有提供依赖。除非将这个依赖加到类路径下。

对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。

        就是你在把这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录。
 

解决办法
        1.保留<scope>provided</scope>配置项,然后手动将依赖加到类路径。
                     File–>Project Structure–>左侧 Libraries,中间新建一个 lib 的project Library,选择 Java,然后在选择项目中的 jar 所在的文件夹

            2.去掉<scope>provided</scope>,改为<scope>compile</scope>,当然只去掉也可,默认就是compile。注:改完后,在maven上运行一下reimport,重新导入一下。打完收工。

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在IntelliJ IDEA遇到`NoClassDefFoundError`通常是由于Java类找不到所需依赖的问题。这种错误通常发生在编译和运行阶段,当程序试图加载不存在或配置不正确的类时。下面是几个可能的解决方案: 1. **检查依赖**: - 确保项目的所有依赖都已添加并正确配置。查看项目结构(Structure)或模块设置(Module Settings)是否存在缺失的库或版本冲突。 - 对于Maven或Gradle项目,尝试更新或重新同步项目的构建文件。 2. **路径问题**: - 检查`CLASSPATH`或IDEA的`Project Structure -> Modules -> Dependencies`下的路径是否包含所有所需的类文件或JAR包。 - 如果是从其他地方复制过来的代码,确保所有必要的JAR都在项目的Libraries,并且它们被设置为"Provided"或"Compile Time"。 3. **源码导入**: - 如果是依赖第三方库的源代码,确认已经正确地将源码导入到项目,并且IDEA能够找到这些源文件。 4. **清理并重建**: - 清除项目缓存(File > Invalidate Caches / Restart...),然后重新构建项目。 5. **检查构建工具日志**: - 查看Maven或Gradle的日志,了解具体哪个依赖没有被成功解析或加载。 6. **排除环境变量问题**: - 确认JVM路径、系统环境变量JAVA_HOME和JDK路径设置正确无误。 如果以上步骤都无法解决问题,可能需要深入分析具体的错误消息,看看它提到了哪些类名,这样有助于定位问题的具体原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值