問題:通過idea啓動springboot項目,特別乾脆利落的報瞭如下異常,絲毫不留餘地
Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor
at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:427)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:420)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:273)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:253)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
at org.siming.im_core.ImCoreApplication.main(ImCoreApplication.java:16)
Caused by: java.lang.IllegalArgumentException: class org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor is not assignable to interface org.springframework.context.ApplicationListener
at org.springframework.util.Assert.assignableCheckFailed(Assert.java:714)
at org.springframework.util.Assert.isAssignable(Assert.java:645)
at org.springframework.util.Assert.isAssignable(Assert.java:676)
at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:439)
... 7 more
Process finished with exit code 1
原因如下:
看下圖,有兩個spring-boot版本,2.2.6,2.2.0。
但是呢,我這個項目其實只依賴了2.2.6,那麼爲何會有2.2.0呢?
因爲之前依賴了2.2.0,現在升級到2.2.6,這樣應該沒什麼問題,但是idea應該是沒有自動清理到2.2.0的緩存,導致2個版本在啓動時都被加載了,故找不到合適的CloudFoundryVcapEnvironmentPostProcessor來實例化,然後就報錯了呀
如何解決呢?當然就是刪掉多餘的版本啦,刪除下圖中標出的2.2.0版本,保留2.2.6版本,即可