IDEA 單元測試報(bào)錯(cuò):Class not found:xxxx springboot的解決
IDEA單元測試報(bào)錯(cuò):Class not found:xxxx springboot
報(bào)錯(cuò)
引入了新依賴,想著在測試模塊進(jìn)行測試。
結(jié)果報(bào)錯(cuò)說
Class not found:xxxx
說找不到這個(gè)類。
解決
把安裝了新依賴的父工程 重新 install一下 再進(jìn)行測試。
測試通過
讓人抓狂的ClassNotFoundException
我們的項(xiàng)目基于Spring Boot + Maven,采用Intelli IDEA工具進(jìn)行開發(fā)。代碼在另一名同事的機(jī)器上檢出之后,
啟動(dòng)項(xiàng)目時(shí),始終出現(xiàn)如下錯(cuò)誤提示
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設(shè)置的問題,但項(xiàng)目完全可以編譯成功,所以此點(diǎn)可以排除。從錯(cuò)誤信息:<code> javax/servlet/http/HttpServletResponse</code>可以看是Servlet的問題,Sevlet是java的web server一個(gè)容器,那么是不是表示這個(gè)容器類無法加載進(jìn)行初始化?利用bing及百度做了一些查找(不要問為什么不用google),并未找到解決方案。
折騰了三個(gè)小時(shí)之后,最終放棄了直接解決這個(gè)問題。讓同事重新安裝了Intell IDEA,并重新下載代碼進(jìn)行編譯運(yùn)行,居然一切正常,真讓人想哭又想笑!自己內(nèi)心松了一口氣,雖然并未找到真正的原因,但終究這個(gè)問題消失了。
“欠下的債,終究要還的!”在沒過兩日的今天,在自己的機(jī)器居然也出現(xiàn)了這種問題,折騰近一個(gè)小時(shí)仍舊沒有找到原因與解決辦法,真是有點(diǎn)讓人奔潰,有點(diǎn)想放棄了。
但轉(zhuǎn)念一想,如果今日放棄,想必日后肯定還會(huì)再次遇到,何不今日多花點(diǎn)時(shí)間,徹底弄清這個(gè)問題,找出原因與解決方案。
沒有了內(nèi)心的煩躁與焦慮,自己反而能夠靜心地把錯(cuò)誤的信息想了又想,推測各種可能的原因。加上之前的種種嘗試的失敗,基本斷定是web server容器的問題。
上網(wǎng)查了一些資料,發(fā)現(xiàn)如果容器出現(xiàn)問題,確實(shí)會(huì)報(bào)此種錯(cuò)誤。項(xiàng)目使用了spring boot的內(nèi)嵌tomcat作為web server,那么很有可能是這個(gè)容器出現(xiàn)了問題。
雖然Maven也加載了spring boot的tomcat包,但是不是這個(gè)包損壞或存在問題。
在項(xiàng)目的pom文件,添加了以下代碼
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>1.5.2.RELEASE</version> </dependency>
更新了Maven的依賴包,重新編譯運(yùn)行,奇跡發(fā)生了,一切OK,內(nèi)心真是有點(diǎn)小激動(dòng)!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)兩人五子棋游戲(二) 畫出棋盤
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)兩人五子棋游戲,畫出五子棋的棋盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03詳解JAVA使用Comparator接口實(shí)現(xiàn)自定義排序
這篇文章主要介紹了JAVA使用Comparator接口實(shí)現(xiàn)自定義排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Java 讀取類路徑下的資源文件實(shí)現(xiàn)代碼
這篇文章主要介紹了Java 讀取類路徑下的資源文件實(shí)現(xiàn)代碼的相關(guān)資料,主要實(shí)現(xiàn)工具類代碼ResourceLoadUtil.java的實(shí)例需要的朋友可以參考下2017-07-07Springboot快速集成sse服務(wù)端推流(最新整理)
SSE?Server-Sent?Events是一種允許服務(wù)器向客戶端推送實(shí)時(shí)數(shù)據(jù)的技術(shù),它建立在?HTTP?和簡單文本格式之上,提供了一種輕量級的服務(wù)器推送方式,通常也被稱為“事件流”(Event?Stream),這篇文章主要介紹了Springboot快速集成sse服務(wù)端推流(最新整理),需要的朋友可以參考下2024-02-02Spring Boot 2.2 正式發(fā)布,大幅性能提升 + Java 13 支持
隨著 Spring Framework 5.2.0 成功發(fā)布之后,Spring Boot 2.2 也緊跟其后,發(fā)布了第一個(gè)版本:2.2.0。下面就來一起來看看這個(gè)版本都更新了些什么值得我們關(guān)注的內(nèi)容2019-10-10深入淺析springsecurity入門登錄授權(quán)
SpringSecurity為我們提供了基于注解的權(quán)限控制方案,這也是我們項(xiàng)目中主要采用的方式,我們可以使用注解去指定訪問對應(yīng)的資源所需的權(quán)限,這篇文章主要介紹了springsecurity入門登錄授權(quán),需要的朋友可以參考下2024-05-05