В соответствии с документацией по зависимостям Maven предполагается, что все компиляционные зависимости должны быть явно перечислены, а не транзитивно использоваться во время компиляции:
предполагается, что [зависимые от переходных компиляций] должны быть областью выполнения, поэтому необходимо, чтобы все зависимости от компиляции были явно указаны - однако есть случай, когда библиотека, на которую вы зависите, расширяет класс из другой библиотеки, заставляя вас доступны во время компиляции. По этой причине компиляция зависимостей времени остается как область компиляции, даже когда они транзитивны.
Spring У Boot есть понятие зависимостей "Starter". Из Spring Загрузите собственную документацию (а также многие примеры использования, которые я видел как в Spring собственных примерах загрузки, так и в других местах), ясно, что они предназначены для транзитного ввода многих других зависимостей, которые будут использоваться при как время выполнения, так и компиляция. Per Spring Документация по загрузке:
Стартеры представляют собой набор удобных дескрипторов зависимостей, которые вы можете включить в свое приложение. Вы получаете универсальный магазин для всех Spring и связанных с ними технологий, которые вам нужны, без необходимости искать образцы кода и копировать вставки загрузок дескрипторов зависимостей. Например, если вы хотите начать использовать Spring и JPA для доступа к базе данных, просто включите в проект проект spring -boot-starter-data-jpa, и вам хорошо идти.
Стартеры содержат множество зависимостей, необходимых для быстрого и быстрого запуска проекта и с помощью согласованного, поддерживаемого набора управляемых транзитивных зависимостей.
Использование этого механизма для транзитного ввода зависимостей в области компиляции, похоже, противоречит намерению использовать Maven для их использования. Одно место, которое делает это совершенно ясным, - это Maven зависимость: проанализировать цель плагина, которая отображает предупреждения, когда напрямую используются зависимостей стартера Maven. Например, запуск mvn dependency:analyze
в Spring Boot own " Приступая к работе" генерирует следующий вывод:
[WARNING] Used undeclared dependencies found:
[WARNING] org.springframework:spring-web:jar:4.3.6.RELEASE:compile
[WARNING] org.springframework.boot:spring-boot-test:jar:1.5.1.RELEASE:test
[WARNING] org.springframework.boot:spring-boot-test-autoconfigure:jar:1.5.1.RELEASE:test
[WARNING] org.springframework:spring-test:jar:4.3.6.RELEASE:test
[WARNING] org.springframework.boot:spring-boot:jar:1.5.1.RELEASE:compile
[WARNING] org.hamcrest:hamcrest-library:jar:1.3:test
[WARNING] org.springframework:spring-context:jar:4.3.6.RELEASE:compile
[WARNING] junit:junit:jar:4.12:test
[WARNING] org.springframework.boot:spring-boot-autoconfigure:jar:1.5.1.RELEASE:compile
[WARNING] org.springframework:spring-beans:jar:4.3.6.RELEASE:compile
[WARNING] Unused declared dependencies found:
[WARNING] org.springframework.boot:spring-boot-starter-web:jar:1.5.1.RELEASE:compile
[WARNING] org.springframework.boot:spring-boot-starter-test:jar:1.5.1.RELEASE:test
[WARNING] org.springframework.boot:spring-boot-starter-actuator:jar:1.5.1.RELEASE:compile
Мой вопрос в том, почему шаблон загрузки Spring был разработан таким образом, чтобы он был прямо противоположным заявленному намерению базовой системы сборки. Есть ли какие-либо опубликованные обсуждения по этой теме или объяснения, данные где-нибудь?