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