springboot嵌入式tomcat和tomcat-embed-jasper

时间:2017-02-10 08:20:48

标签: java tomcat spring-boot

我有时会在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?或者有什么理由吗?

2 个答案:

答案 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