Je vois parfois ces déclarations suivantes dans 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>
....
comme vous pouvez le constater, spring-boot-starter-web a également été déclaréas Tomcat-embed-jasper.
spring-Boot-Starter-Web n'est-il pas déjà doté d'un tomcat intégré? ou y a-t-il une raison?
Comme vous l'avez dit, le spring-boot-starter-web
inclut le spring-boot-starter-Tomcat
. Vous pouvez le vérifier ici
Le spring-boot-starter-Tomcat
inclut le Tomcat-embed-core
. Vous pouvez le vérifier ici
Mais, il semble que Tomcat-embed-core
n'inclut pas Tomcat-embed-jasper
. En fait, c'est Tomcat-embed-jasper
qui inclut la dépendance avec Tomcat-embed-core
. Vérifiez-le ici
Quoi qu'il en soit, le Tomcat-embed-jasper
est marqué en tant que provided
, indique donc que vous attendez du JDK ou d'un conteneur qu'il fournisse la dépendance au moment de l'exécution. Cette portée est uniquement disponible sur le chemin de classe de compilation et de test et n'est pas transitive.
En conclusion, le spring-boot-starter-web
inclut la dépendance intégrée Tomcat mais n'inclut pas la dépendance intégrée jasper. Ce doit donc être la raison pour la déclarer séparément.
N'oubliez pas non plus qu'en utilisant Spring IO Platform en tant que parent, vous pouvez facilement gérer les dépendances. Pour en savoir plus à ce sujet vous pourriez lire mon post
J'espère que ça aide,
Étendu de la réponse de jcgarcia.
Même s'il est fourni, mais quand vous construirez comme une guerre, spring-boot-maven-plugin inclura deux autres jar: ecj-3.12.3.jar Tomcat-embed-jasper-8.5.23.jar