2017-02-10 120 views
2

我有時會看到在pom.xml中這些聲明如下...springboot嵌入式Tomcat和Tomcat的嵌入,碧玉

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    .... 

,你可以看到,springboot起動器的Web宣佈以及 爲Tomcat的嵌入-碧玉。

是不是它spring-boot-starter-web已經有一個嵌入式的tomcat?爲什麼有些開發者仍然聲明tomcat-embed-jasper和boot-starter-web?或者有什麼理由?

回答

2

如您所說,spring-boot-starter-web包括spring-boot-starter-tomcat。你可以檢查它here

spring-boot-starter-tomcat包括tomcat-embed-core。你可以檢查它here

但是,好像tomcat-embed-core不包括tomcat-embed-jasper。實際上,是tomcat-embed-jasper誰包括依賴tomcat-embed-core。檢查它here

無論如何,tomcat-embed-jasper標記爲provided,因此表明您期望JDK或容器在運行時提供依賴項。此範圍僅在編譯和測試類路徑中可用,且不是傳遞性的。

總之,spring-boot-starter-web包含tomcat嵌入式依賴關係,但它不包含jasper嵌入式依賴關係,因此應該分別聲明它的原因。

另外,請記住,使用Spring IO Platform作爲父母,您可以輕鬆管理依賴關係。爲了更多地瞭解這一點,你could read my post

希望它能幫助,

+0

知道了!,也感謝鏈接。 –

+1

可能值得補充的是,開發人員添加'tomcat-embed-jasper'的原因通常是他們希望他們的嵌入式Tomcat能夠編譯jsp文件。因爲這就是碧玉所做的。 'spring-boot-starter-web'不包含'tomcat-embed-jasper',因此必須單獨聲明。 這也解釋了依賴關係。嵌入式的Tomcat不需要jasper工作,你仍然可以使用servlet或其他web過濾器。但當然,Jasper需要一個容器來編譯jsp文件。 – Fencer

+0

謝謝你的回答,但我遵循你提到的層次結構,但對我來說,「tomcat-embed-jasper」沒有標記「提供」。請幫助我理解這一點。提前致謝。 –

0

從jcgarcia的答案擴展。

即使它提供了,但是當你建立戰爭,彈簧引導Maven的插件將包括兩個罐子: ECJ-3.12.3.jar Tomcat的嵌入,碧玉8.5.23.jar