tool - ¿Por qué las dependencias iniciales de Spring Boot están diseñadas para ser utilizadas en contra de la intención declarada de los mecanismos de dependencia transitiva de Maven?
spring for java (1)
De acuerdo con la documentación de dependencia de Maven , se pretende que todas las dependencias de compilación se enumeren explícitamente, en lugar de usarse transitoriamente en tiempo de compilación:
se pretende que [las dependencias de compilación transitiva] sean en su lugar el ámbito de tiempo de ejecución, de modo que todas las dependencias de compilación se enumeren explícitamente; sin embargo, existe el caso en que la biblioteca de la que depende amplía una clase de otra biblioteca, lo que obliga a tener disponible en tiempo de compilación. Por este motivo, las dependencias de tiempo de compilación permanecen como ámbito de compilación incluso cuando son transitivas.
Spring Boot tiene una noción de dependencias "Starter". De la propia documentación de Spring Boot (así como de los muchos ejemplos de uso que he visto tanto en los propios ejemplos de Spring Boot como en otros), está claro que estos tienen la intención de incorporar transitivamente numerosas otras dependencias para ser utilizadas tanto en tiempo de ejecución como compilar . La documentación de Per Spring Boot :
Los principiantes son un conjunto de descripciones de dependencia convenientes que puede incluir en su aplicación. Obtiene una ventanilla única para toda la tecnología Spring y relacionada que necesita, sin tener que buscar código de muestra y copiar cargas de descriptores de dependencia. Por ejemplo, si desea comenzar a utilizar Spring y JPA para acceder a la base de datos, solo incluya la dependencia spring-boot-starter-data-jpa en su proyecto, y ya está listo para comenzar.
Los iniciadores contienen muchas de las dependencias que necesita para poner en marcha un proyecto rápidamente y con un conjunto consistente y soportado de dependencias transitivas administradas.
Usar este mecanismo para traer transitoriamente dependencias con ámbito de compilación parece estar en desacuerdo con la intención de cómo Maven pretende oficialmente que se utilicen. Un lugar que deja esto bastante claro es la dependencia de Maven : analice el objetivo del complemento, que muestra advertencias cuando las dependencias de inicio de Maven se usan directamente. Por ejemplo, ejecutar la mvn dependency:analyze
en el propio ejemplo de " Inicio " de Spring Boot genera el siguiente resultado:
[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
Mi pregunta es por qué el patrón de arranque Spring Boot fue diseñado de tal manera que sea directamente contrario a la intención declarada del sistema de construcción subyacente. ¿Hay alguna discusión publicada sobre el tema o explicaciones en cualquier lugar?
Parece que ha configurado el complemento de dependencia para fallar en las advertencias. Creo que el complemento de dependencia escupe una advertencia si no has declarado explícitamente una dependencia transitiva.
Intente cambiar <failOnWarning>true</failOnWarning>
a <failOnWarning>false</failOnWarning>