在运行 SpringMVC项目的时候,出现了报错 IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序,具体如下:
Caused by: java.lang.IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序。有关具体信息,请参阅Servlet规范的第8.2.2 2c节。思量使用绝对排序。
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2275)
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2231)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1252)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:961)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:290)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4352)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
... 37 more
这里出现这个标题的原因,是由于在pom.xml 中切换了 SpringMVC的版本,而在切换之前已经在项目布局里将扩展包文件导入到了 web 中,而切换之后 artifacts 下目次 WEB-INF\lib 中的扩展包并不会主动删除,从而导致目次中存在多个版本的 SpringMVC jar 包,从而引发了这个错误。
所以办理的办法就是把 WEB-INF\lib 中的包扫除一下,重新导入一个包到 lib中。记住需要重新导入,不能光把目次扫除就完事。而且删除这些 jar包需要停一下 tomcat 服务器,不然文件在使用中无法删除。
二、org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包罗TLD。
这个标题真的搞得很烦,org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包罗TLD。 Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65。
试了N多种情况,仍不能确定是哪里的标题,网上的很多答复和办理方法都并不能完全恰当,大概导致这种标题的原因有很多种。包括 MAVEN包的标题特别是 spring-webmvc 和 servlet-api 等这些依赖的版本标题、还有扩展导入 web 目次、JDK版本等,最后我 整理一个SpringMVC项目运行起来的完整配置和代码示例步伐。在这里也做个记录,以便以后有标题来排查。
#. 一个SpringMVC项目运行起来的完整配置和代码示例步伐
先说一下情况,我这里是 IDEA 2024.1.6版本,JDK是IDEA中安装好的21版本,Maven也是IDEA中的3版本。项目目次截图如下: