Я пытаюсь выяснить, использует ли какой-либо из наших проектов с весенней загрузкой spring-cloud, в котором есть недавно обнаруженный эксплойт.
Я знаю, что spring-boot поставляется с spring-cloud как зависимость, но когда я проверяю проект в Eclipse на наличие внешних зависимостей, ни один из них не показывает spring-cloud как зависимость. Это хорошо, но зачем?
Я также видел, что во многих проектах используется компонент spring-boot, spring-boot-autoconfigure, у которого в качестве зависимости есть spring-cloud-spring-service-connector. Это также не отображается как внешняя зависимость, но опять же, почему? Кажется, если он указан в maven компонента как зависимость, он должен автоматически стать внешней зависимостью.
Правда, меня перевернули. Можете ли вы объяснить второй пункт?
Что вы хотите объяснить? Если Spring Boot не использует Spring Cloud, вы, очевидно, не увидите этих зависимостей... Если проект не использует зависимость, почему она должна отображаться?
Облако Spring включено в загрузку Spring. Spring-boot-autoconfigure, часть Spring Boot, имеет в качестве зависимости spring-cloud-spring-service-connector. Почему он не указан как внешняя зависимость проекта, использующего spring-boot-auto-configure?
Поскольку Spring Cloud не зависит от spring-boot-autoconfigure
. Spring Cloud зависит от Spring Boot нет наоборот.
.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.4.RELEASE>type spring-boot-autoconfigure-2.1.4.RELEASE.pom | findstr spring.cloud <artifactId>spring-cloud-spring-service-connector</artifactId>
Вы можете проверить все зависимости для [spring-boot-autoconfigure
](github.com/spring-projects/spring-boot/blob/main/…) и увидеть, что там нет ничего, связанного с Spring Cloud, только обычные проекты портфолио Spring.
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-spring-service-connector</artifactId> <version>2.0.5.RELEASE</version> <scope>compile< /scope> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> <необязательный>true</необязательный> </dependency>
Версия, на которую вы указываете, является старой, и если вы проверите, что это зависимость необязательный, как и большинство из них. И необязательные зависимости никогда не включаются.
Это находится в файле .m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.4.RELEASE>type spring-boot-autoconfigure-2.1.4.RELEASE.pom
Возможно, вы захотите включить интересующую вас версию Spring Boot (как вы видите, она сильно различается между версиями)!.
Ах, я не видел необязательный. Таким образом, он может использоваться проектом, но, поскольку он необязателен, он не отмечен? Я думаю, я не знаю, что означает необязательный.
Да, он старый, но уязвимость говорит, что старые версии уязвимы для проклятия.
Спасибо, ваши комментарии были очень полезны.
spring-boot-autoconfigure
в основном имеет optional
зависимости, и они никогда транзитивно и автоматически не включаются в проекты, использующие spring-boot-autoconfigure
. Как работает необязательные зависимости, объясняется в документации Maven.
Если вы хотите использовать их, вам также необходимо явно указать их в своем проекте, поэтому вы не увидите их, если они не упомянуты явно.
Spring Boot не имеет Spring Cloud в качестве зависимости... Spring Cloud имеет Spring Boot в качестве зависимости. Так что ваше понимание ошибочно.