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

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-781570.html

到了这里,关于maven的scop作用域依赖问题导致idea社区版报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决IDEA Maven 下载依赖包速度过慢问题

    解决IDEA Maven 下载依赖包速度过慢问题 ,jar包下载过慢,有一部分网络原因,很大一部分是因为需要请求到国外镜像仓库,响应比较慢 右键点击项目,找到maven,选择 Open ‘settings.xml’或者Create ‘settings.xml’ 将以下代码粘入文件中,重启idea即可提高速度 idea超级镜像库,这

    2024年02月11日
    浏览(68)
  • 解决maven 在IDEA 下载依赖包速度慢的问题

    当我们用idea下载maven的依赖的时候会很慢 原因:movn可能时因为idea用的时外部的镜像源 解决方法:在idea界面按两下shift建,然后搜索 setting.xml 产出原有的内容复制以下内容就后重启 当再次idea在使用idea下载依赖报包的时候速度就可以提升很多了 当我们搜索后没有这个 setti

    2024年02月07日
    浏览(56)
  • idea中导入maven项目,但是却没有导入依赖的问题

    今天我遇到很奇葩的问题,用maven几年了,只是导入maven项目配置好maven,所有的依赖从仓库下载下来后就自动导入了,前几天电脑硬盘坏了,所以重新装的idea, 可以看到pom的素有依赖都没引入,我重新导入pom还是一样。 这是需要勾选上: 然后再重启idea,再reimport一下就好了

    2024年02月16日
    浏览(49)
  • 解决idea中依赖报错找不到这个包,但是本地maven仓库中却存在此依赖包问题

    问题: intellj idea新打开一个项目,经过项目加载完毕后,但是发现maven的依赖存在一些无法下载到的问题。 原因一: 配置的私服和中央仓库中本身就无此包(这属于基本异常,不讨论) 原因二: 本地仓库中存在此包,当时却无法加载到,此类现象更可能是拷贝了其他电脑的

    2024年02月13日
    浏览(56)
  • Springboot idea 中 maven配置问题,找不到依赖:Could not find artifact xxxx

    现象:当我们从代码仓拉取新项目时,从该项目的开发同事拿到其maven的settings文件,作为项目的maven配置,为了是能找到工程中所依赖的包,能从远程仓下载下来。 然后本地仓的包,也从同事那边拷贝一份过来,直接运行mvn -install 会显示找不到xxxx包 1、本地我们也已经同步

    2024年02月09日
    浏览(44)
  • 聊聊Maven的依赖传递、依赖管理、依赖作用域

    在Maven中,依赖是会传递的,假如在业务项目中引入了 spring-boot-starter-web 依赖: 那么业务项目不仅直接引入了 spring-boot-starter-web 依赖,还间接引入了 spring-boot-starter-web 的依赖项: spring-boot-starter 、 spring-boot-starter-json 、 spring-boot-starter-tomcat 、 spring-web 、 spring-webmvc 。 Maven依

    2024年02月08日
    浏览(38)
  • 【亲测有效】解决idea中maven项目的pom文件不会自动下载jar包问题 + 更新不完整依赖命令

    一杯茶,一袋烟,一个bug改一天,唉~ 一天下来整个人都麻了; 废话不多说了,作者创作本文旨在使用言简意赅的语言为同样遇到此问题的伙伴们尽快解决困难,少走弯路。 看问题:idea中maven项目的pom文件不会自动下载jar包 setting —— maven —— 去掉work offline 的勾 Settings -

    2024年02月06日
    浏览(48)
  • idea导入依赖一直卡死,或者无法正常导入问题记录( failed to transfer from https://repo.maven.apache.org/maven2··等)

    前言 :在接触的新项目中,idea 导入 maven 依赖一直报错,首先是 maven 依赖一直卡着不动,而后是无法正常导入依赖包,各别的依赖包依然爆红,遇见了org.bytedeco:javacv:jar:1.4.3 failed to transfer from···,java: 程序包org.bytedeco.javacv不存在··· Try to run Maven import with -U flag (force upda

    2024年02月05日
    浏览(48)
  • idea查找maven所有依赖

    缺点是只有依赖,没有版本 settings–plugins–搜索maven helper并安装 安装后打开pom.xml文件会有依赖解析 勾选conflict就是有冲突的依赖 选中all dependencies as list则所有依赖一列展示 选中all dependencies as tree 则所有依赖树形展示 缺点,如果是多模块项目,则必须一个一个pom.xml文件的

    2024年02月11日
    浏览(43)
  • idea 一直卡在maven正在解析maven依赖

    修改maven Importing的jvm参数

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包