問題概述
根據要求對Solr服務進行升級,經過全面改操後,啓動項目時,單元測試一直報錯,測試無法通過,項目啓動不起來,異常:“ Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser ”,
部分截圖如下:
具體異常信息:
java.lang.NoClassDefFoundError: org/apache/http/message/TokenParser
at org.apache.http.client.utils.URLEncodedUtils.parse(URLEncodedUtils.java:288)
at org.apache.http.client.utils.URLEncodedUtils.parse(URLEncodedUtils.java:249)
at org.apache.http.client.utils.URIBuilder.parseQuery(URIBuilder.java:111)
at org.apache.http.client.utils.URIBuilder.digestURI(URIBuilder.java:199)
at org.apache.http.client.utils.URIBuilder.<init>(URIBuilder.java:91)
at org.apache.http.client.utils.URIUtils.rewriteURI(URIUtils.java:206)
at org.apache.http.impl.client.DefaultRequestDirector.rewriteRequestURI(DefaultRequestDirector.java:347)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:471)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:448)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:91)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
at com.huazai.b2c.aiyou.test.solrj.TSolrjClient.queryDocumentById(TSolrjClient.java:232)
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:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser
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)
... 41 more
解決辦法
經過博主的各種騷操作,最終把這個坑填好了,其天坑過程就不過多的叨叨了,
兩種解決辦法:
1、將solr版本降到4.x
solr4.x使用的 HttpSolrServer,SolrServer
solr5.x以後升級,改爲了 HttpSolrClient,SolrClient
就不貼源碼了,點到爲止,感興趣的可以去一探究竟,一般沒有必要浪費去看這個的,博主看只是爲了解決這個問題。
2、排除httpclient相關的兩個依賴包:
<!-- solrj 客戶端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.4</version>
<exclusions>
<exclusion>
<artifactId>httpclient</artifactId>
<groupId>org.apache.httpcomponents</groupId>
</exclusion>
<exclusion>
<artifactId>httpcore</artifactId>
<groupId>org.apache.httpcomponents</groupId>
</exclusion>
</exclusions>
</dependency>
有人提意見,將solrj升級到5.x以後或最新版本,如果一樣是老系統,博主不見升級,牽一髮則動全身,會出現各種版本不兼容(因爲博主試過,升級後,出現各種不兼容的情況,這個坑填好,又出現另一個坑,讓人感覺有永遠填不完的坑,經過一頓猛如虎的操作後,幾乎到了崩潰邊緣,然後果斷回滾代碼,關掉IDE,長長的深吸了口氣,終於解決了,結束!!!)
解決問題後,再次測試,通了:
好了,關於 Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser 異常的解決辦法 就寫到這兒了,如果還有什麼疑問或遇到什麼問題歡迎掃碼提問,也可以給我留言哦,我會一一詳細的解答的。
歇後語:“ 共同學習,共同進步 ”,也希望大家多多關注CSND的IT社區。
作 者: | 華 仔 |
聯繫作者: | [email protected] |
來 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/98340187 |
版權聲明: | 本文爲博主原創文章,請在轉載時務必註明博文出處! |