惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
ThreatConnect
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
H
Help Net Security
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
A
Arctic Wolf
G
Google Developers Blog
量子位
U
Unit 42
I
InfoQ
V
V2EX
F
Fox-IT International blog
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
T
Tailwind CSS Blog
SecWiki News
SecWiki News
Know Your Adversary
Know Your Adversary
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
The Hacker News
The Hacker News
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
Recent Commits to openclaw:main
Recent Commits to openclaw:main
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
C
Cisco Blogs
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
Recorded Future
Recorded Future
T
Tenable Blog
W
WeLiveSecurity
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
T
The Blog of Author Tim Ferriss
www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
Docker
C
Cybersecurity and Infrastructure Security Agency CISA
PCI Perspectives
PCI Perspectives

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 一个实例带你理解JavaBean WebFilter-SpringBoot过滤器注解实例讲解 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 实例带你学会简单的Java Thread多线程 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 一个实例理解Java Runnable多线程用处与用法 一个最简单的实例理解Semaphore在Java中的作用 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 大白话之Docker(壹):快速入门&&简单官方实例 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level Java日志插件-Slog4J下载 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) Log-MySQL root用户登录后无法查看数据库全部表/正常访问数据库 Access denied for user 'root'@'localhost' to database 大白话之Docker(叁):制作一个运行Tomcat服务端的Docker镜像 Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,清除「敏感信息」 将Tomcat、MySQL从Linux迁移到Windows的心路历程(干货):令人恐惧的字符编码 大白话之Java反射-初学最迷的概念:能干啥?咋用? 大白话之Java面向接口编程:最“正经”的中文实例讲解,看不懂来打我! 大白话 | 课堂实践:使用Iterator对数组进行遍历 大白话之fail-fast | fail-safe:为什么会有这个机制?它有什么作用? 刨根问底 | 大白话:在使用注解后,框架是怎么知道你哪个方法使用了注解的?用@RequestMapping注解举例详解! 大白话之必会Java Atomic | 线程一点也不安全(二):Atomic的ABA问题会导致什么情况?如何解决? 随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 随笔 | Tomcat:续-从Linux迁移到Windows编码问题彻底解决 大白话之AutoClosable接口 | try-with-resources:JDK1.7的新特性,提高重复回收效率 - 技术改变视野 大白话之Java多线程join方法:开局一张图,试学一分钟,你就费和我一样,理解介个方法 大白话之Java Stream流:将类数组流化,便捷批量修改,通俗讲解! Java 困扰三周の问题:使用byte[]或skip()方法读取字节流Stream文件尾部多/少/缺字节解决方法
Spring: java.lang.NoSuchMethodError: clearCache | ClassNotFoundException | Error during artifact deployment 思路及解决办法 - 技术改变视野
adlered · 2019-12-09 · via 技术改变视野

前言

一如既往的今天,打算打开WEB项目一如既往地修(写)BUG。就在我运行的时候,弹出了错误:

 1java.lang.NoSuchMethodError: org.springframework.core.ResolvableType.clearCache()
 2	at org.springframework.context.support.AbstractApplicationContext.resetCommonCaches(AbstractApplicationContext.java:873)
 3	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:559)
 4	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
 5	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
 6	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
 7	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853)
 8	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
 9	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
10	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
11	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
12	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
13	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092)
14	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834)
15	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
16	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
17	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
18	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
19	at java.lang.Thread.run(Thread.java:745)
 1严重: Error configuring application listener of class org.springframework.web.util.Log4jConfigListener
 2java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
 3	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
 4	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
 5	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
 6	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
 7	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
 8	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
 9	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
10	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
11	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
12	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
13	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
14	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
15	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
16	at java.lang.Thread.run(Thread.java:745)

马鸭,昨天还能完完整整的运行,今天咋就废了?

解决思路

小提示:如果你使用IDEA,Tomcat提示Error during artifact deployment,你可以在Tomcat Localhost Log查看错误日志:

8.png

在各种翻找和思考后,我尝试了以下几种办法:

下方都有可能是导致出现该问题的解决方案,每个解决方案不能保证解决问题,但我建议在备份后多做尝试。

1)代码出错

出现问题可能是由于你的注解使用不遵循语法导致的,而IDE无法检测部分注解的正确性。

引用自https://blog.csdn.net/x_iya/article/details/54234665

1@WebServlet(name = "testServlet", urlPatterns = {"test.do"})

上面这段代码的urlPatterns赋值不符合要求,应修改为:

1@WebServlet(name = "testServlet", urlPatterns = "test.do")

不过在我与上一正常比对后确认,我的语法符合要求。

2)Rebuild

在IDEA中,默认不会将所有文件重新编译一次,而是只编译检测到修改的文件。但有时也会出现BUG,尝试Build - Rebuild Project来解决。

在尝试后,也没有解决我的问题。

3)web.xml

检查WEB-INF - web.xml文件的contextConfigLocation设置,它用于在拦截器中定义配置文件的位置。

  1. 检查param-value指向的Spring配置文件是否正确
  2. 如果没有此配置项,添加一个

如果你不知道应该指向哪个文件,查找你的项目中是否有contextConfig.xml,或内容类似下图中的文件:

经检查,我的配置没有问题。

4)配置Artifacts

如果你使用的IDE是IDEA,按CTRL+ALT+SHIFT+S进入Project Structure设置,选择左侧Artifacts,在右侧选择你Tomcat部署的项目:

Available Elements下方,右键你的项目并选择Put into Output Root

(绝望)还是无法正常启动。

5)Spring版本

由于提示了NoSuchMethodError: clearCache,在经过查阅后得知clearCache()Spring 4.2+版本才有的方法。如果你使用了Maven,可以通过修改pom.xml来修改Spring的版本:

修改(如果不存在则添加)配置:

1<spring.version>4.2.3.RELEASE</spring.version>

重新Build项目。

在修改版本后,我的Spring便换了一个报错:

1Error during artifact deployment. See server log for details.

于是查看日志(IDEA中选择Tomcat Localhost Log选项卡),发现错误原因是:

1java.lang.ClassNotFoundException

很明显,有Jar包并没有被Tomcat所识别,也就是说,Maven在将所有Jar包复制到Tomcat的Lib中时,出现了漏网之鱼

6)Maven:重新导入

既然出现了漏网之鱼,就把Maven中的所有依赖重新导入试试。
在IDEA中,右键pom.xml文件,选择Maven -> Reimport即可。

7)配置Tomcat

由于刚刚我们修改了Artifact,我们就需要将Artiface的项目部署重新绑定到Tomcat中。
在IDEA中,点击右上角的Tomcat项目,选择Edit Configuration

Deployment中,选中第一个窗口中的内容,并点击下方减号,然后再点击加号,重新添加你刚刚修改的Artifact项目部署。

请注意:Application context选项,会在你修改部署文件后自动变更为项目名为目录,我建议将其修改为/,以根目录来访问网站目录。

后语

通过各种尝试,我发现在使用4、6、7三种方法后,我的问题终于得到了解决。在此建议,在备份项目后,尝试每一种方法。祝你修复成功!(我先去自闭了,我相信你会来一起自闭的......)

牢骚:啥也没动就这样了,折腾了一天...... 心累。
把所有的解决方案都尝试复现并记录下来了,希望能帮到现在满头大汉(误)的你。
由于是问题复现,所以记录可能不完整,如有问题可以在评论区交流~