maven的scop作用域依赖问题导致idea社区版报错

2024-01-08 18:04

本文主要是介绍maven的scop作用域依赖问题导致idea社区版报错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 错误:代码没改,卸了专业版后改用社区版出现以下报错

2024-01-08 16:34:29.374 ERROR [main] org.springframework.boot.SpringApplication.reportFailure:823 Application run failed
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer

Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:507)

Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext

java.lang.IllegalStateException: Failed to introspect Class [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]

Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext

2.解决过程

针对错误进行分析:
(1)首先第一个错误:【Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer

对于这个错误,查阅了网上的教程反馈为:1.启动类的位置不对,2.配置文件是否存在且位置是否对,以及内容是否有错误
我的代码是因为卸载了专业版idea换成社区版idea才出现的,仔细看了代码也确实不是这个问题造成的。
(2)对于第二个问题毫无头绪,直接往下看第三个错误【Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext】
这个问题很明显了就是没有依赖,直接pom添加依赖:

<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>

没解决问题:修改provided为runtime
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>runtime</scope> </dependency>

也可以直接删除runtime,就是采用默认的complie了,两者在运行都会生效,解决了servlet报错问题。

(3)解决了之后出现的报错是:
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
参考这个教程:https://blog.csdn.net/weixin_44299027/article/details/113590189
虽然教程没解决我的问题,但是给了我思路。
问题应该是tomcat的依赖出现问题了,参考了教程的第五种解决方案,没能解决我的问题,猜测应该是这个作用域的问题,把原pom文件中的scop直接删了,问题解决
原来的

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>

修改后

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

最后复盘一下,推测servlet出现的问题应该是由于tomcat这里的问题引起的,因为专业版本能运行说明依赖不存在缺失问题,我就回去把javax.servlet的依赖给删了,最终确实是可以正常启动运行的。所有的问题就是在provided这里,只要把这个作用域改成包含运行状态即可,就是可以选择runtime,也可以直接删了provided。

至于为何是这样。特意问了一下AI:
AI回答:IntelliJ IDEA 的专业版和社区版对于 Maven 项目的处理有些差异。

在专业版中,当你在 pom.xml 中使用 provided 作用域时,IDEA 会将该依赖标记为 “Provided”,这表示该依赖由容器(如 Tomcat)提供,而不需要在构建过程中包含在最终的构建结果中。这对于 Web 应用程序来说是很常见的,因为 Tomcat 这样的 Web 容器会提供 Servlet API。

而在社区版中,IDEA 不会特别标记 provided 依赖,并且默认行为是将该依赖包含在构建结果中。这可能是为了简化使用体验和适应更广泛的项目需求。

所以,对于你提到的这个例子,在专业版中强制去掉 provided 作用域是不必要的,而在社区版中可能需要去掉 provided 作用域,以便将相应的依赖包含在构建结果中。

请注意,这仅仅是由于 IDEA 不同版本对 Maven 项目处理的差异导致的。在实际构建和部署项目时,还是需要根据相应的环境和要求进行适当的设置和配置。
最后附一下作用域的作用范围:

下面是 <scope> 可能的取值以及对应的作用:

  • compile:默认的作用范围。这意味着依赖项在编译、测试、运行项目时都是可用的。
  • provided:这个作用范围表示依赖项会被编译时和测试时使用,但在运行时(部署到容器中)将由容器或其他类似的环境提供。比如 Servlet API 就是一个典型的 provided 依赖。
  • runtime:这表示依赖项在运行时是可用的,但在编译时不会被使用。比如 JDBC 驱动程序可以被设置为 runtime 作用范围,因为编译代码并不会依赖到它,但在运行时是需要的。
  • test:这表示依赖项只会在测试编译和运行测试时使用,不会在项目的主代码中使用。
  • system:这个作用范围被认为是非常危险的,应该尽量避免使用。它表示依赖项在本地系统中可用,并通过 <systemPath> 元素指定路径。这意味着 Maven 将不会去仓库中查找该依赖项,而是直接使用指定路径中的 JAR 文件。

<scope> 元素省略时,默认的作用范围是 compile

这篇关于maven的scop作用域依赖问题导致idea社区版报错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584346

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)