2017-02-10 8 views
2

я иногда вижу эти следующее заявление в pom.xml ...springboot встроенный и кот мартовский кот-встраивать-яшма

<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> 
    .... 

, как вы можете видеть, springboot стартер-полотно было объявлено, а , как кот-встраивать-яшма.

не имеет ли весна-бот-стартер-сеть уже встроенный tomcat? Почему некоторые разработчики все еще объявляют tomcat-embed-jasper вместе с boot-starter-web? или есть какая-то причина?

ответ

2

Как вы сказали, spring-boot-starter-web включает в себя spring-boot-starter-tomcat. Вы можете это проверить here

spring-boot-starter-tomcat содержит tomcat-embed-core. Вы можете это проверить here

Но, похоже tomcat-embed-core не включает tomcat-embed-jasper. Фактически, это tomcat-embed-jasper, который включает зависимость от tomcat-embed-core. Проверьте это here

В любом случае, tomcat-embed-jasper отмечен как provided, поэтому указывает, что вы ожидаете, что JDK или контейнер предоставят зависимость во время выполнения. Эта область видимости доступна только в классе компиляции и теста, и не является транзитивной.

В заключение, spring-boot-starter-web включает в себя зависимую от tomcat встроенную, но в нее не включена встроенная зависимость яшмы, поэтому это должно быть причиной для ее объявления отдельно.

Кроме того, помните, что с использованием Spring IO Platform в качестве родителя вы можете легко управлять зависимостями. Чтобы узнать больше об этом вы could read my post

Надеется, что это помогает,

+0

получил это !, спасибо также за ссылки. –

+1

Возможно, стоит добавить, что причина, по которой разработчики добавляют 'tomcat-embed-jasper' (в моем понимании, который был частью вопроса), обычно будет заключаться в том, что они хотят, чтобы их встроенный Tomcat мог компилировать jsp-файлы. Потому что это то, что делает яшма. 'spring-boot-starter-web' не включает' tomcat-embed-jasper', поэтому он должен быть объявлен отдельно. Это также объясняет зависимости. Вложенный Tomcat не нуждается в jasper для работы, вы все равно можете использовать сервлеты или другие веб-фильтры. Но, конечно, jasper нужен контейнер для компиляции jsp-файлов. – Fencer

+0

Спасибо за ответ, но я последовал за упомянутой вами иерархией, но для меня «tomcat-embed-jasper» не отмечен «предоставленным». Пожалуйста, помогите мне понять это. Заранее спасибо. –

0

простирался от ответа jcgarcia в.

Даже это предусмотрено, но когда вы строите, как война, весна-загрузки Maven-плагин будет включать в себя еще два баночку: СЕС-3.12.3.jar -встраивать кот-яшмы-8.5.23.jar

Смежные вопросы