天天看點

war包釋出tomcat出錯

 tomcat 錯誤 嚴重:Error listenerStart

網上說有很多種可能的原因,我的是因為缺少了spring-core.jar,但我的pom.xml裡确實是有的,而且在eclipse裡是可以跑的程式,打成war後這個包就沒了。

原因是加了句provided,把下面的scope這句去掉就好了:

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
                       
		</dependency>      

  <scope>provided</scope>

provided指明隻在編譯時使用這個jar包,但打包時不會将它打包在内,是以如果目标容器(如tomcat)沒有這個包,就會報錯。

http://peak.iteye.com/blog/299225 寫道 依賴範圍控制哪些依賴在哪些classpath 中可用,哪些依賴包含在一個應用中。讓我們詳細看一下每一種範圍:

compile (編譯範圍)

compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在所有的classpath 中可用,同時它們也會被打包。

provided (已提供範圍)

provided 依賴隻有在當JDK 或者一個容器已提供該依賴之後才使用。例如, 如果你開發了一個web 應用,你可能在編譯 classpath 中需要可用的Servlet API 來編譯一個servlet,但是你不會想要在打包好的WAR 中包含這個Servlet API;這個Servlet API JAR 由你的應用伺服器或者servlet 容器提供。已提供範圍的依賴在編譯classpath (不是運作時)可用。它們不是傳遞性的,也不會被打包。

runtime (運作時範圍)

runtime 依賴在運作和測試系統的時候需要,但在編譯的時候不需要。比如,你可能在編譯的時候隻需要JDBC API JAR,而隻有在運作的時候才需要JDBC

驅動實作。

test (測試範圍)

test範圍依賴 在一般的編譯和運作時都不需要,它們隻有在測試編譯和測試運作階段可用。

system (系統範圍)

system範圍依賴與provided 類似,但是你必須顯式的提供一個對于本地系統中JAR 檔案的路徑。這麼做是為了允許基于本地對象編譯,而這些對象是系統類庫的一部分。這樣的構件應該是一直可用的,Maven 也不會在倉庫中去尋找它。如果你将一個依賴範圍設定成系統範圍,你必須同時提供一個 systemPath 元素。注意該範圍是不推薦使用的(你應該一直盡量去從公共或定制的 Maven 倉庫中引用依賴)。