2017-01-30 102 views
1

我有更新我的項目使用Spring 1.4.3 BOOT。該代碼可以編譯和運行,而不從Eclipse的霓虹燈1. 問題,但是,當我從命令行春季啓動1.4.3嵌入式的Tomcat的NoSuchMethodError StringManager.getManager

mvn clean install -DskipTests 

java -jar myweb\target\my-web-1.0-SNAPSHOT.jar 

運行我得到運行時錯誤和Tomcat沒有啓動

Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager; 
     at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:43) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 

請你能告訴爲什麼?如何找到它Tomcat是用於在運行時,我的理解是,8.5.6是有編制範圍(?)

請幫助。如果建議在POM文件的屬性中使用tomcat.version或添加tomcat-juli依賴項,那麼請幫我理解爲什麼它是必需的?

不耐煩stackoverflow'ers不只是鞭打新來者,只是因爲你可以做。你可以很容易地問你是否想要我的POM,但我只是使用spring-boot-starter-web而已。

+0

顯然,你不僅使用'彈簧引導起動web'的東西在另一個依賴它打破東西拉。所以基本上這個問題包含的信息太少,無法給出答案。 –

回答

1

對於這類問題,它往往是由於有你的classpath中同一類的多個罐子,所以:

  1. 尋找到這一類/方法可能來自,通過打開類型彈出(CTRL在Eclipse中+ SHIFT + T)。它會顯示包含類的類路徑中的每個jar。
  2. 打開每個罐子類,看看哪一個包含您的方法,哪一個沒有。
  3. 顯示項目的依賴關係層次結構mvn dependency:tree
  4. 如果2個罐子在您的類路徑中,您可以排除不包含該方法的罐子。
+0

謝謝。接受爲答案。 Eclipse確定該類存在於2個罐子中。問題是tomcat-util jar被添加爲依賴項目/模塊中的依賴項。它是版本8.0.27和引導得到8.5.6。因此衝突 –