springboot embedded tomcat and tomcat-embed-jasper



我有时会在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以及boot-starter-web?还是有什么原因?

正如你所说,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 平台作为父级,您可以轻松管理依赖项。要了解更多信息,您可以阅读我的帖子

希望对您有所帮助,

从jcgarcia的答案扩展而来。

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

对于那些在 2022 年使用 Java 版本 17、Maven 版本 3.0.0 和包 Jar 仍然面临此错误的人。我刚才也遇到了同样的问题,似乎即使我们设置<scope>Provided</scope> Maven也没有拿起罐子。相反,您可以做的是在添加依赖项时将其完全删除,然后运行Maven以再次安装依赖项。它肯定会修复它。所以你的pom.xml文件将去:-

 <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

 <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

最新更新