IDEA 單元測試報錯:Class not found:xxxx springboot的解決
IDEA單元測試報錯:Class not found:xxxx springboot
報錯
引入了新依賴,想著在測試模塊進行測試。
結(jié)果報錯說
Class not found:xxxx
說找不到這個類。
解決
把安裝了新依賴的父工程 重新 install一下 再進行測試。
測試通過
讓人抓狂的ClassNotFoundException
我們的項目基于Spring Boot + Maven,采用Intelli IDEA工具進行開發(fā)。代碼在另一名同事的機器上檢出之后,
啟動項目時,始終出現(xiàn)如下錯誤提示
03-11 15:41:23[org.springframework.boot.SpringApplication-825][main][13298] - Application startup failed
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:609)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:521)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:507)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:241)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1069)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1042)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764)
at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113)
at cn.com.icaifeng.Application.main(Application.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 29 more
開始懷疑是JDK或JRE設置的問題,但項目完全可以編譯成功,所以此點可以排除。從錯誤信息:<code> javax/servlet/http/HttpServletResponse</code>可以看是Servlet的問題,Sevlet是java的web server一個容器,那么是不是表示這個容器類無法加載進行初始化?利用bing及百度做了一些查找(不要問為什么不用google),并未找到解決方案。
折騰了三個小時之后,最終放棄了直接解決這個問題。讓同事重新安裝了Intell IDEA,并重新下載代碼進行編譯運行,居然一切正常,真讓人想哭又想笑!自己內(nèi)心松了一口氣,雖然并未找到真正的原因,但終究這個問題消失了。
“欠下的債,終究要還的!”在沒過兩日的今天,在自己的機器居然也出現(xiàn)了這種問題,折騰近一個小時仍舊沒有找到原因與解決辦法,真是有點讓人奔潰,有點想放棄了。
但轉(zhuǎn)念一想,如果今日放棄,想必日后肯定還會再次遇到,何不今日多花點時間,徹底弄清這個問題,找出原因與解決方案。
沒有了內(nèi)心的煩躁與焦慮,自己反而能夠靜心地把錯誤的信息想了又想,推測各種可能的原因。加上之前的種種嘗試的失敗,基本斷定是web server容器的問題。
上網(wǎng)查了一些資料,發(fā)現(xiàn)如果容器出現(xiàn)問題,確實會報此種錯誤。項目使用了spring boot的內(nèi)嵌tomcat作為web server,那么很有可能是這個容器出現(xiàn)了問題。
雖然Maven也加載了spring boot的tomcat包,但是不是這個包損壞或存在問題。
在項目的pom文件,添加了以下代碼
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>1.5.2.RELEASE</version> </dependency>
更新了Maven的依賴包,重新編譯運行,奇跡發(fā)生了,一切OK,內(nèi)心真是有點小激動!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解JAVA使用Comparator接口實現(xiàn)自定義排序
這篇文章主要介紹了JAVA使用Comparator接口實現(xiàn)自定義排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03Spring Boot 2.2 正式發(fā)布,大幅性能提升 + Java 13 支持
隨著 Spring Framework 5.2.0 成功發(fā)布之后,Spring Boot 2.2 也緊跟其后,發(fā)布了第一個版本:2.2.0。下面就來一起來看看這個版本都更新了些什么值得我們關注的內(nèi)容2019-10-10