Spring Boot嵌雄猫及雄猫嵌碧玉

vnjpjtjt  于 2022-12-04  发布在  Spring
关注(0)|答案(3)|浏览(114)

我有时会在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-碧玉一样被声明。
spring-boot-starter-web不是已经有了一个嵌入式tomcat吗?为什么有些开发人员仍然在boot-starter-web的沿着声明tomcat-embed-碧玉?或者有什么原因吗?

bnl4lu3b

bnl4lu3b1#

正如您所说,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嵌入式依赖项,但不包含碧玉嵌入式依赖项,因此应该单独声明它。
此外,请记住,使用SpringIOPlatform作为父平台,您可以轻松地管理依赖项。
希望能有所帮助,

qhhrdooz

qhhrdooz2#

引申自贾嘉的回答。
即使它是提供的,但当你构建成战争时,spring-boot-maven-plugin会多包括两个jar:Ruby

dluptydi

dluptydi3#

对于那些在2022年Java版本17、Maven版本3.0.0和Package Jar仍然面临这个错误的人,我刚才也遇到了同样的问题,看起来即使我们设置了<scope>Provided</scope>,Maven也没有拾取jar。你可以做的是在添加依赖项时完全删除它,然后再次运行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>

相关问题