我有时会在pom.xml中看到以下声明...
<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>
....
如您所见,spring-boot-starter-web也被声明了 作为tomcat-embed-jasper。
不是spring-boot-starter-web已经有嵌入式tomcat了吗? 为什么有些开发人员仍然使用boot-starter-web声明tomcat-embed-jasper?或者有什么理由吗?
答案 0 :(得分:7)
正如您所说,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
希望它有所帮助,
答案 1 :(得分:0)
从jcgarcia的回答中延伸出来。
即使提供了它,但是当你构建为war时,spring-boot-maven-plugin将包含两个jar: ECJ-3.12.3.jar Tomcat的嵌入-碧玉8.5.23.jar