springboot嵌入式tomcat和tomcat-embed-jasper

我有时会在pom.xml中看到以下声明……

  org.springframework.boot spring-boot-starter-web   javax.servlet jstl   org.apache.tomcat.embed tomcat-embed-jasper provided  .... 

如您所见,spring-boot-starter-web被声明为tomcat-embed-jasper。

是不是spring-boot-starter-web已经有嵌入式tomcat? 为什么有些开发人员仍然使用boot-starter-web声明tomcat-embed-jasper? 或者有什么理由吗?

正如你所说, spring-boot-starter-web包括spring-boot-starter-tomcat 。 你可以在这里查看

spring-boot-starter-tomcat包括tomcat-embed-core 。 你可以在这里查看

但是,似乎tomcat-embed-core不包含tomcat-embed-jasper 。 事实上, tomcat-embed-jasper包含了与tomcat-embed-core依赖关系。 在这里查看

无论如何, tomcat-embed-jasper被标记为provided ,因此表明您希望JDK或容器在运行时提供依赖性。 此范围仅在编译和测试类路径中可用,并且不可传递。

总之, spring-boot-starter-web包含tomcat嵌入式依赖项,但它不包含jasper嵌入式依赖项,因此应该是单独声明它的原因。

另外,请记住,使用Spring IO Platform作为父级,您可以轻松地管理依赖项。 要了解更多相关信息,您可以阅读我的post

希望能帮助到你,

从jcgarcia的答案扩展而来。

即使是提供,但是当你构建为战争时,spring-boot-maven-plugin将包含两个jar:ecj-3.12.3.jar tomcat-embed-jasper-8.5.23.jar