springboot embedded tomcat and tomcat-embed-jasper

2022-09-01 21:05:29

我有时会在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。

是不是弹簧-启动-启动器-web已经有一个嵌入式雄猫了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?


答案 1

正如您所说,包括 .你可以在这里检查spring-boot-starter-webspring-boot-starter-tomcat

包括 .你可以在这里检查spring-boot-starter-tomcattomcat-embed-core

但是,似乎不包括.实际上,是谁包括与 的依赖关系。在这里查看tomcat-embed-coretomcat-embed-jaspertomcat-embed-jaspertomcat-embed-core

无论如何,标记为 ,因此表示您希望 JDK 或容器在运行时提供依赖项。此作用域仅在编译和测试类路径上可用,并且不可传递。tomcat-embed-jasperprovided

总之,它包括tomcat嵌入式依赖关系,但它不包括jasper嵌入式依赖关系,所以这应该是单独声明它的原因。spring-boot-starter-web

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

希望它有帮助,


答案 2

从jcgarcia的答案延伸。

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


推荐