springboot embedded tomcat and tomcat-embed-jasper

tuty_fruity :

I sometimes see these following declaration in 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>
    ....

as you can see, spring-boot-starter-web was declared as well as tomcat-embed-jasper.

isn't it spring-boot-starter-web already have an embedded tomcat? why some developers still declare tomcat-embed-jasper along with boot-starter-web? or is there any reason?

jcgarcia :

As you said, the spring-boot-starter-web includes the spring-boot-starter-tomcat. You could check it here

The spring-boot-starter-tomcat includes the tomcat-embed-core. You could check it here

But, seems like tomcat-embed-core doesn't include tomcat-embed-jasper. In fact, is tomcat-embed-jasper who includes dependency with tomcat-embed-core. Check it here

Anyway, the tomcat-embed-jasper is marked as provided, so indicates that you expect the JDK or a container to provide the dependency at runtime. This scope is only available on the compilation and test classpath, and is not transitive.

In conclusion, the spring-boot-starter-web includes the tomcat embedded dependency but it doesn't includes the jasper embedded dependency, so that should be the reason to declare it separately.

Also, remember that using Spring IO Platform as parent you are able to manage dependencies easily. To know more about this you could read my post

Hope it helps,

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=454733&siteId=1