SpringBoot源码解读系列二——依赖配置
上一篇简单介绍了下SpringBoot的大体轮廓,我们了解到SpringBoot简化了Spring应用的开发,其实Spring自打诞生开始就是一个“胶水”框架,本身不做业务耦合,只是作为各类框架和工具的集成,体现了万能胶水的平台性,而SpringBoot是在其之上做了有些开发的优化,主要思想是“习惯优于配置”。
在开发过程中有这样一个现象,之前我们开发工程用到什么样的工具或者库,就上Maven中央仓库找到对应的Maven依赖,按照Maven坐标的配置方式很详细地配置到pom.xml中,往往这样下来,一个工程里pom.xml上千行很常见。而现在,我们只需要指定两个关键的地方,就能大大减少pom.xml的长度,相当简洁和优雅:
1、父pom依赖
在生成的SpringBoot脚手架工程中,会自动给你带上父pom的依赖,如下:
查看代码
org.springframework.boot
spring-boot-starter-parent
2.6.2
我们可以跟进去看一下,进去发现是一个pom文件:
查看代码
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.springframework.boot
spring-boot-dependencies
2.6.2
spring-boot-starter-parent
pom
spring-boot-starter-parent
Parent pom providing dependency and plugin management for applications built with Maven
1.8
@
${java.version}
${java.version}
UTF-8
UTF-8
https://spring.io/projects/spring-boot
Apache License, Version 2.0
https://www.apache.org/licenses/LICENSE-2.0
Pivotal
info@pivotal.io
Pivotal Software, Inc.
https://www.spring.io
https://github.com/spring-projects/spring-boot
${basedir}/src/main/resources
true
**/application*.yml
**/application*.yaml
**/application*.properties
${basedir}/src/main/resources
**/application*.yml
**/application*.yaml
**/application*.properties
org.jetbrains.kotlin
kotlin-maven-plugin
${kotlin.version}
${java.version}
true
compile
compile
compile
test-compile
test-compile
test-compile
org.apache.maven.plugins
maven-compiler-plugin
true
org.apache.maven.plugins
maven-failsafe-plugin
integration-test
verify
${project.build.outputDirectory}
org.apache.maven.plugins
maven-jar-plugin
${start-class}
true
org.apache.maven.plugins
maven-war-plugin
${start-class}
true
org.apache.maven.plugins
maven-resources-plugin
${project.build.sourceEncoding}
${resource.delimiter}
false
pl.project13.maven
git-commit-id-plugin
revision
true
yyyy-MM-dd'T'HH:mm:ssZ
true
${project.build.outputDirectory}/git.properties
org.springframework.boot
spring-boot-maven-plugin
repackage
repackage
${start-class}
org.apache.maven.plugins
maven-shade-plugin
true
true
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
org.springframework.boot
spring-boot-maven-plugin
2.6.2
package
shade
META-INF/spring.handlers
META-INF/spring.factories
META-INF/spring.schemas
${start-class}
会发现,这个仅仅是中间加强的pom,实际上还有一层,而这个中间加强的pom声明了许多父pom的属性,比如作者、开源协议、github的URL等,另外也附上了打包构建的方式以及添加的Maven插件等。
再继续跟进去,这才到了真正的父pom:
查看代码
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.springframework.boot
spring-boot-dependencies
2.6.2
pom
spring-boot-dependencies
Spring Boot Dependencies
https://spring.io/projects/spring-boot
Apache License, Version 2.0
https://www.apache.org/licenses/LICENSE-2.0
Pivotal
info@pivotal.io
Pivotal Software, Inc.
https://www.spring.io
https://github.com/spring-projects/spring-boot
5.16.3
2.7.7
1.9.93
2.19.0
1.9.7
3.21.0
4.0.6
4.1.1
3.2.0
1.11.22
2.9.3
4.13.0
1.5.1
1.15
2.9.0
3.12.0
1.6
2.11.1
3.2.4
11.5.7.0
1.0.11.RELEASE
10.14.2.0
4.2.7
2.10.9.2
3.9.9
7.15.2
3.0.0
8.0.5
2.3.31
4.9.10
3.0.4
2.3.5
1.2.6
3.0.9
2.8.9
1.4.200
2.2
4.2.4
2.2.1
5.6.3.Final
6.2.0.Final
4.0.3
2.5.2
2.54.0
4.1.5
4.5.13
5.1.2
4.4.15
5.1.2
12.1.10.Final
2.22
2.13.1
1.2.2
1.3.5
2.0.3
1.1.6
1.0.2
1.6.7
1.1.4
2.2.3
4.0.4
1.2.7
1.3.3
2.0.2
1.1.2
2.1.6
2.3.3
1.4.2
2.3.3
3.1.6
1.2.0
1.3.2
1.1.1
2.3.1
2.3.1
2.0.1
1.1.4
1.0
1.6.2
1.1
2.2
1.3
2.0.1.Final
1.1
1.2.0
4.0.4.java8
3.4.2.Final
2.0.6.1
3.7.1
2.35
9.0.52
2.2.0.v201112011158
1.1.10
9.4.44.v20210927
1.15
1.2.15
1.7.1
3.14.15
2.6.0
2.4.7
1.5.0
1.2
1.3.1
4.13.2
5.8.2
3.0.0
1.6.10
1.5.2
6.1.5.RELEASE
4.5.0
2.17.0
1.2.9
1.18.22
2.7.4
3.0.0
3.3.0
3.1.0
3.8.1
3.2.0
2.8.2
3.0.0
2.22.2
3.2.0
2.5.2
3.2.2
3.2.0
3.3.1
3.2.0
3.2.4
3.2.1
2.22.2
3.3.2
1.8.1
1.9.15
4.0.0
4.4.0
9.4.1.jre8
8.0.27
1.9.22
4.3.6
4.1.72.Final
2.0.46.Final
3.14.9
21.3.0.0
1.2.2
42.3.1
0.12.0
2.3.2
5.0.0
Arabba-SR11
5.13.1
0.4.0
1.0.3
2020.0.14
4.4.0
1.1.1
1.3.8
1.2.1
2.2.21
1.5.3
3.141.59
2.54.0
4.7.6
4.0.1
1.7.32
1.29
8.8.2
2.4.1
4.3.4
2021.1.0
5.3.14
1.4.0
5.5.7
2.8.1
2.3.5.RELEASE
2.0.5.RELEASE
1.3.1
5.6.1
2021.1.1
3.1.2
3.36.0.3
1.6.7
3.0.14.RELEASE
2.0.1
3.0.4.RELEASE
3.0.4.RELEASE
3.0.0
9.0.56
4.0.14
2.2.14.Final
2.8.1
0.48
1.6.3
1.0.2
2.8.4
org.apache.activemq
activemq-amqp
${activemq.version}
org.apache.activemq
activemq-blueprint
${activemq.version}
org.apache.activemq
activemq-broker
${activemq.version}
org.apache.activemq
activemq-camel
${activemq.version}
org.apache.activemq
activemq-client
${activemq.version}
org.apache.activemq
activemq-console
${activemq.version}
commons-logging
commons-logging
org.apache.activemq
activemq-http
${activemq.version}
org.apache.activemq
activemq-jaas
${activemq.version}
org.apache.activemq
activemq-jdbc-store
${activemq.version}
org.apache.activemq
activemq-jms-pool
${activemq.version}
org.apache.activemq
activemq-kahadb-store
${activemq.version}
org.apache.activemq
activemq-karaf
${activemq.version}
org.apache.activemq
activemq-leveldb-store
${activemq.version}
commons-logging
commons-logging
org.apache.activemq
activemq-log4j-appender
${activemq.version}
org.apache.activemq
activemq-mqtt
${activemq.version}
org.apache.activemq
activemq-openwire-generator
${activemq.version}
org.apache.activemq
activemq-openwire-legacy
${activemq.version}
org.apache.activemq
activemq-osgi
${activemq.version}
org.apache.activemq
activemq-partition
${activemq.version}
org.apache.activemq
activemq-pool
${activemq.version}
org.apache.activemq
activemq-ra
${activemq.version}
org.apache.activemq
activemq-run
${activemq.version}
org.apache.activemq
activemq-runtime-config
${activemq.version}
org.apache.activemq
activemq-shiro
${activemq.version}
org.apache.activemq
activemq-spring
${activemq.version}
commons-logging
commons-logging
org.apache.activemq
activemq-stomp
${activemq.version}
org.apache.activemq
activemq-web
${activemq.version}
antlr
antlr
${antlr2.version}
com.google.appengine
appengine-api-1.0-sdk
${appengine-sdk.version}
org.apache.activemq
artemis-amqp-protocol
${artemis.version}
org.apache.activemq
artemis-commons
${artemis.version}
commons-logging
commons-logging
org.apache.activemq
artemis-core-client
${artemis.version}
org.apache.geronimo.specs
geronimo-json_1.0_spec
org.apache.activemq
artemis-jms-client
${artemis.version}
org.apache.geronimo.specs
geronimo-json_1.0_spec
org.apache.activemq
artemis-jms-server
${artemis.version}
org.apache.geronimo.specs
geronimo-json_1.0_spec
org.apache.activemq
artemis-journal
${artemis.version}
org.apache.activemq
artemis-selector
${artemis.version}
org.apache.activemq
artemis-server
${artemis.version}
commons-logging
commons-logging
org.apache.geronimo.specs
geronimo-json_1.0_spec
org.apache.activemq
artemis-service-extensions
${artemis.version}
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjtools
${aspectj.version}
org.aspectj
aspectjweaver
${aspectj.version}
org.assertj
assertj-core
${assertj.version}
com.atomikos
transactions-jdbc
${atomikos.version}
com.atomikos
transactions-jms
${atomikos.version}
com.atomikos
transactions-jta
${atomikos.version}
org.awaitility
awaitility
${awaitility.version}
org.awaitility
awaitility-groovy
${awaitility.version}
org.awaitility
awaitility-kotlin
${awaitility.version}
org.awaitility
awaitility-scala
${awaitility.version}
net.bytebuddy
byte-buddy
${byte-buddy.version}
net.bytebuddy
byte-buddy-agent
${byte-buddy.version}
com.github.ben-manes.caffeine
caffeine
${caffeine.version}
com.github.ben-manes.caffeine
guava
${caffeine.version}
com.github.ben-manes.caffeine
jcache
${caffeine.version}
com.github.ben-manes.caffeine
simulator
${caffeine.version}
com.datastax.oss
java-driver-core
${cassandra-driver.version}
org.slf4j
jcl-over-slf4j
com.fasterxml
classmate
${classmate.version}
commons-codec
commons-codec
${commons-codec.version}
org.apache.commons
commons-dbcp2
${commons-dbcp2.version}
commons-logging
commons-logging
org.apache.commons
commons-lang3
${commons-lang3.version}
commons-pool
commons-pool
${commons-pool.version}
org.apache.commons
commons-pool2
${commons-pool2.version}
com.couchbase.client
java-client
${couchbase-client.version}
com.ibm.db2
jcc
${db2-jdbc.version}
io.spring.gradle
dependency-management-plugin
${dependency-management-plugin.version}
org.apache.derby
derby
${derby.version}
org.apache.derby
derbyclient
${derby.version}
net.sf.ehcache
ehcache
${ehcache.version}
org.ehcache
ehcache
${ehcache3.version}
org.ehcache
ehcache-clustered
${ehcache3.version}
org.ehcache
ehcache-transactions
${ehcache3.version}
org.elasticsearch
elasticsearch
${elasticsearch.version}
org.elasticsearch.client
transport
${elasticsearch.version}
org.elasticsearch.client
elasticsearch-rest-client
${elasticsearch.version}
commons-logging
commons-logging
org.elasticsearch.client
elasticsearch-rest-client-sniffer
${elasticsearch.version}
commons-logging
commons-logging
org.elasticsearch.client
elasticsearch-rest-high-level-client
${elasticsearch.version}
org.elasticsearch.distribution.integ-test-zip
elasticsearch
${elasticsearch.version}
zip
org.elasticsearch.plugin
transport-netty4-client
${elasticsearch.version}
de.flapdoodle.embed
de.flapdoodle.embed.mongo
${embedded-mongo.version}
org.flywaydb
flyway-core
${flyway.version}
org.freemarker
freemarker
${freemarker.version}
org.glassfish
jakarta.el
${glassfish-el.version}
org.glassfish.jaxb
codemodel
${glassfish-jaxb.version}
org.glassfish.jaxb
codemodel-annotation-compiler
${glassfish-jaxb.version}
org.glassfish.jaxb
jaxb-jxc
${glassfish-jaxb.version}
org.glassfish.jaxb
jaxb-runtime
${glassfish-jaxb.version}
org.glassfish.jaxb
jaxb-xjc
${glassfish-jaxb.version}
org.glassfish.jaxb
txw2
${glassfish-jaxb.version}
org.glassfish.jaxb
txwc2
${glassfish-jaxb.version}
org.glassfish.jaxb
xsom
${glassfish-jaxb.version}
org.glassfish.web
jakarta.servlet.jsp.jstl
${glassfish-jstl.version}
com.google.code.gson
gson
${gson.version}
com.h2database
h2
${h2.version}
org.hamcrest
hamcrest
${hamcrest.version}
org.hamcrest
hamcrest-core
${hamcrest.version}
org.hamcrest
hamcrest-library
${hamcrest.version}
com.hazelcast
hazelcast
${hazelcast.version}
com.hazelcast
hazelcast-spring
${hazelcast.version}
com.hazelcast
hazelcast-hibernate52
${hazelcast-hibernate5.version}
com.hazelcast
hazelcast-hibernate53
${hazelcast-hibernate5.version}
org.hibernate
hibernate-c3p0
${hibernate.version}
org.hibernate
hibernate-core
${hibernate.version}
org.hibernate
hibernate-ehcache
${hibernate.version}
org.hibernate
hibernate-entitymanager
${hibernate.version}
org.hibernate
hibernate-envers
${hibernate.version}
org.hibernate
hibernate-hikaricp
${hibernate.version}
org.hibernate
hibernate-java8
${hibernate.version}
org.hibernate
hibernate-jcache
${hibernate.version}
org.hibernate
hibernate-jpamodelgen
${hibernate.version}
org.hibernate
hibernate-micrometer
${hibernate.version}
org.hibernate
hibernate-proxool
${hibernate.version}
org.hibernate
hibernate-spatial
${hibernate.version}
org.hibernate
hibernate-testing
${hibernate.version}
org.hibernate
hibernate-vibur
${hibernate.version}
org.hibernate.validator
hibernate-validator
${hibernate-validator.version}
org.hibernate.validator
hibernate-validator-annotation-processor
${hibernate-validator.version}
com.zaxxer
HikariCP
${hikaricp.version}
org.hsqldb
hsqldb
${hsqldb.version}
net.sourceforge.htmlunit
htmlunit
${htmlunit.version}
commons-logging
commons-logging
org.apache.httpcomponents
httpasyncclient
${httpasyncclient.version}
commons-logging
commons-logging
org.apache.httpcomponents
fluent-hc
${httpclient.version}
org.apache.httpcomponents
httpclient
${httpclient.version}
commons-logging
commons-logging
org.apache.httpcomponents
httpclient-cache
${httpclient.version}
org.apache.httpcomponents
httpclient-osgi
${httpclient.version}
org.apache.httpcomponents
httpclient-win
${httpclient.version}
org.apache.httpcomponents
httpmime
${httpclient.version}
org.apache.httpcomponents.client5
httpclient5
${httpclient5.version}
org.apache.httpcomponents.client5
httpclient5-cache
${httpclient5.version}
org.apache.httpcomponents.client5
httpclient5-fluent
${httpclient5.version}
org.apache.httpcomponents.client5
httpclient5-win
${httpclient5.version}
org.apache.httpcomponents
httpcore
${httpcore.version}
org.apache.httpcomponents
httpcore-nio
${httpcore.version}
org.apache.httpcomponents.core5
httpcore5
${httpcore5.version}
org.apache.httpcomponents.core5
httpcore5-h2
${httpcore5.version}
org.apache.httpcomponents.core5
httpcore5-reactive
${httpcore5.version}
org.influxdb
influxdb-java
${influxdb-java.version}
com.sun.activation
jakarta.activation
${jakarta-activation.version}
jakarta.activation
jakarta.activation-api
${jakarta-activation.version}
jakarta.annotation
jakarta.annotation-api
${jakarta-annotation.version}
jakarta.jms
jakarta.jms-api
${jakarta-jms.version}
jakarta.json
jakarta.json-api
${jakarta-json.version}
jakarta.json.bind
jakarta.json.bind-api
${jakarta-json-bind.version}
jakarta.mail
jakarta.mail-api
${jakarta-mail.version}
jakarta.management.j2ee
jakarta.management.j2ee-api
${jakarta-management.version}
jakarta.persistence
jakarta.persistence-api
${jakarta-persistence.version}
jakarta.servlet
jakarta.servlet-api
${jakarta-servlet.version}
jakarta.servlet.jsp.jstl
jakarta.servlet.jsp.jstl-api
${jakarta-servlet-jsp-jstl.version}
jakarta.transaction
jakarta.transaction-api
${jakarta-transaction.version}
jakarta.validation
jakarta.validation-api
${jakarta-validation.version}
jakarta.websocket
jakarta.websocket-api
${jakarta-websocket.version}
jakarta.ws.rs
jakarta.ws.rs-api
${jakarta-ws-rs.version}
jakarta.xml.bind
jakarta.xml.bind-api
${jakarta-xml-bind.version}
jakarta.xml.soap
jakarta.xml.soap-api
${jakarta-xml-soap.version}
jakarta.xml.ws
jakarta.xml.ws-api
${jakarta-xml-ws.version}
org.codehaus.janino
commons-compiler
${janino.version}
org.codehaus.janino
commons-compiler-jdk
${janino.version}
org.codehaus.janino
janino
${janino.version}
javax.activation
javax.activation-api
${javax-activation.version}
javax.annotation
javax.annotation-api
${javax-annotation.version}
javax.cache
cache-api
${javax-cache.version}
javax.xml.bind
jaxb-api
${javax-jaxb.version}
javax.xml.ws
jaxws-api
${javax-jaxws.version}
javax.jms
javax.jms-api
${javax-jms.version}
javax.json
javax.json-api
${javax-json.version}
javax.json.bind
javax.json.bind-api
${javax-jsonb.version}
javax.mail
javax.mail-api
${javax-mail.version}
javax.money
money-api
${javax-money.version}
javax.persistence
javax.persistence-api
${javax-persistence.version}
javax.transaction
javax.transaction-api
${javax-transaction.version}
javax.validation
validation-api
${javax-validation.version}
javax.websocket
javax.websocket-api
${javax-websocket.version}
jaxen
jaxen
${jaxen.version}
org.firebirdsql.jdbc
jaybird
${jaybird.version}
org.firebirdsql.jdbc
jaybird-jdk18
${jaybird.version}
org.jboss.logging
jboss-logging
${jboss-logging.version}
org.jdom
jdom2
${jdom2.version}
redis.clients
jedis
${jedis.version}
org.mortbay.jasper
apache-el
${jetty-el.version}
org.eclipse.jetty.orbit
javax.servlet.jsp
${jetty-jsp.version}
org.eclipse.jetty
jetty-reactive-httpclient
${jetty-reactive-httpclient.version}
com.samskivert
jmustache
${jmustache.version}
org.apache.johnzon
johnzon-core
${johnzon.version}
org.apache.johnzon
johnzon-jaxrs
${johnzon.version}
org.apache.johnzon
johnzon-jsonb
${johnzon.version}
org.apache.johnzon
johnzon-jsonb-extras
${johnzon.version}
org.apache.johnzon
johnzon-jsonschema
${johnzon.version}
org.apache.johnzon
johnzon-mapper
${johnzon.version}
org.apache.johnzon
johnzon-websocket
${johnzon.version}
org.jolokia
jolokia-core
${jolokia.version}
org.jooq
jooq
${jooq.version}
org.jooq
jooq-codegen
${jooq.version}
org.jooq
jooq-kotlin
${jooq.version}
org.jooq
jooq-meta
${jooq.version}
com.jayway.jsonpath
json-path
${json-path.version}
com.jayway.jsonpath
json-path-assert
${json-path.version}
net.minidev
json-smart
${json-smart.version}
org.skyscreamer
jsonassert
${jsonassert.version}
javax.servlet
jstl
${jstl.version}
net.sourceforge.jtds
jtds
${jtds.version}
junit
junit
${junit.version}
org.apache.kafka
connect-api
${kafka.version}
org.apache.kafka
connect-basic-auth-extension
${kafka.version}
org.apache.kafka
connect-file
${kafka.version}
org.apache.kafka
connect-json
${kafka.version}
org.apache.kafka
connect-runtime
${kafka.version}
org.apache.kafka
connect-transforms
${kafka.version}
org.apache.kafka
kafka-clients
${kafka.version}
org.apache.kafka
kafka-metadata
${kafka.version}
org.apache.kafka
kafka-log4j-appender
${kafka.version}
org.apache.kafka
kafka-streams
${kafka.version}
org.apache.kafka
kafka-streams-scala_2.12
${kafka.version}
org.apache.kafka
kafka-streams-scala_2.13
${kafka.version}
org.apache.kafka
kafka-streams-test-utils
${kafka.version}
org.apache.kafka
kafka-tools
${kafka.version}
org.apache.kafka
kafka_2.12
${kafka.version}
org.apache.kafka
kafka_2.13
${kafka.version}
io.lettuce
lettuce-core
${lettuce.version}
org.liquibase
liquibase-core
${liquibase.version}
ch.qos.logback
logback-access
${logback.version}
ch.qos.logback
logback-classic
${logback.version}
ch.qos.logback
logback-core
${logback.version}
org.projectlombok
lombok
${lombok.version}
org.mariadb.jdbc
mariadb-java-client
${mariadb.version}
io.micrometer
micrometer-registry-stackdriver
${micrometer.version}
javax.annotation
javax.annotation-api
org.jvnet.mimepull
mimepull
${mimepull.version}
org.mockito
mockito-core
${mockito.version}
org.mockito
mockito-inline
${mockito.version}
org.mockito
mockito-junit-jupiter
${mockito.version}
org.mongodb
bson
${mongodb.version}
org.mongodb
mongodb-driver-core
${mongodb.version}
org.mongodb
mongodb-driver-legacy
${mongodb.version}
org.mongodb
mongodb-driver-reactivestreams
${mongodb.version}
org.mongodb
mongodb-driver-sync
${mongodb.version}
com.microsoft.sqlserver
mssql-jdbc
${mssql-jdbc.version}
mysql
mysql-connector-java
${mysql.version}
com.google.protobuf
protobuf-java
net.sourceforge.nekohtml
nekohtml
${nekohtml.version}
org.neo4j.driver
neo4j-java-driver
${neo4j-java-driver.version}
io.netty
netty-tcnative
${netty-tcnative.version}
io.netty
netty-tcnative-boringssl-static
${netty-tcnative.version}
com.squareup.okhttp3
logging-interceptor
${okhttp3.version}
com.squareup.okhttp3
mockwebserver
${okhttp3.version}
com.squareup.okhttp3
okcurl
${okhttp3.version}
com.squareup.okhttp3
okhttp
${okhttp3.version}
com.squareup.okhttp3
okhttp-dnsoverhttps
${okhttp3.version}
com.squareup.okhttp3
okhttp-sse
${okhttp3.version}
com.squareup.okhttp3
okhttp-testing-support
${okhttp3.version}
com.squareup.okhttp3
okhttp-tls
${okhttp3.version}
com.squareup.okhttp3
okhttp-urlconnection
${okhttp3.version}
org.messaginghub
pooled-jms
${pooled-jms.version}
org.postgresql
postgresql
${postgresql.version}
org.quartz-scheduler
quartz
${quartz.version}
com.mchange
c3p0
com.zaxxer
*
org.quartz-scheduler
quartz-jobs
${quartz.version}
com.rabbitmq
amqp-client
${rabbit-amqp-client.version}
com.rabbitmq
stream-client
${rabbit-stream-client.version}
org.reactivestreams
reactive-streams
${reactive-streams.version}
io.rest-assured
json-path
${rest-assured.version}
io.rest-assured
json-schema-validator
${rest-assured.version}
io.rest-assured
rest-assured
${rest-assured.version}
io.rest-assured
scala-support
${rest-assured.version}
io.rest-assured
spring-mock-mvc
${rest-assured.version}
io.rest-assured
spring-web-test-client
${rest-assured.version}
io.rest-assured
xml-path
${rest-assured.version}
io.reactivex
rxjava
${rxjava.version}
io.reactivex
rxjava-reactive-streams
${rxjava-adapter.version}
io.reactivex.rxjava2
rxjava
${rxjava2.version}
org.springframework.boot
spring-boot
2.6.2
org.springframework.boot
spring-boot-test
2.6.2
org.springframework.boot
spring-boot-test-autoconfigure
2.6.2
org.springframework.boot
spring-boot-actuator
2.6.2
org.springframework.boot
spring-boot-actuator-autoconfigure
2.6.2
org.springframework.boot
spring-boot-autoconfigure
2.6.2
org.springframework.boot
spring-boot-autoconfigure-processor
2.6.2
org.springframework.boot
spring-boot-buildpack-platform
2.6.2
org.springframework.boot
spring-boot-configuration-metadata
2.6.2
org.springframework.boot
spring-boot-configuration-processor
2.6.2
org.springframework.boot
spring-boot-devtools
2.6.2
org.springframework.boot
spring-boot-jarmode-layertools
2.6.2
org.springframework.boot
spring-boot-loader
2.6.2
org.springframework.boot
spring-boot-loader-tools
2.6.2
org.springframework.boot
spring-boot-properties-migrator
2.6.2
org.springframework.boot
spring-boot-starter
2.6.2
org.springframework.boot
spring-boot-starter-activemq
2.6.2
org.springframework.boot
spring-boot-starter-actuator
2.6.2
org.springframework.boot
spring-boot-starter-amqp
2.6.2
org.springframework.boot
spring-boot-starter-aop
2.6.2
org.springframework.boot
spring-boot-starter-artemis
2.6.2
org.springframework.boot
spring-boot-starter-batch
2.6.2
org.springframework.boot
spring-boot-starter-cache
2.6.2
org.springframework.boot
spring-boot-starter-data-cassandra
2.6.2
org.springframework.boot
spring-boot-starter-data-cassandra-reactive
2.6.2
org.springframework.boot
spring-boot-starter-data-couchbase
2.6.2
org.springframework.boot
spring-boot-starter-data-couchbase-reactive
2.6.2
org.springframework.boot
spring-boot-starter-data-elasticsearch
2.6.2
org.springframework.boot
spring-boot-starter-data-jdbc
2.6.2
org.springframework.boot
spring-boot-starter-data-jpa
2.6.2
org.springframework.boot
spring-boot-starter-data-ldap
2.6.2
org.springframework.boot
spring-boot-starter-data-mongodb
2.6.2
org.springframework.boot
spring-boot-starter-data-mongodb-reactive
2.6.2
org.springframework.boot
spring-boot-starter-data-r2dbc
2.6.2
org.springframework.boot
spring-boot-starter-data-redis
2.6.2
org.springframework.boot
spring-boot-starter-data-redis-reactive
2.6.2
org.springframework.boot
spring-boot-starter-data-neo4j
2.6.2
org.springframework.boot
spring-boot-starter-data-rest
2.6.2
org.springframework.boot
spring-boot-starter-freemarker
2.6.2
org.springframework.boot
spring-boot-starter-groovy-templates
2.6.2
org.springframework.boot
spring-boot-starter-hateoas
2.6.2
org.springframework.boot
spring-boot-starter-integration
2.6.2
org.springframework.boot
spring-boot-starter-jdbc
2.6.2
org.springframework.boot
spring-boot-starter-jersey
2.6.2
org.springframework.boot
spring-boot-starter-jetty
2.6.2
org.springframework.boot
spring-boot-starter-jooq
2.6.2
org.springframework.boot
spring-boot-starter-json
2.6.2
org.springframework.boot
spring-boot-starter-jta-atomikos
2.6.2
org.springframework.boot
spring-boot-starter-log4j2
2.6.2
org.springframework.boot
spring-boot-starter-logging
2.6.2
org.springframework.boot
spring-boot-starter-mail
2.6.2
org.springframework.boot
spring-boot-starter-mustache
2.6.2
org.springframework.boot
spring-boot-starter-oauth2-client
2.6.2
org.springframework.boot
spring-boot-starter-oauth2-resource-server
2.6.2
org.springframework.boot
spring-boot-starter-quartz
2.6.2
org.springframework.boot
spring-boot-starter-reactor-netty
2.6.2
org.springframework.boot
spring-boot-starter-rsocket
2.6.2
org.springframework.boot
spring-boot-starter-security
2.6.2
org.springframework.boot
spring-boot-starter-test
2.6.2
org.springframework.boot
spring-boot-starter-thymeleaf
2.6.2
org.springframework.boot
spring-boot-starter-tomcat
2.6.2
org.springframework.boot
spring-boot-starter-undertow
2.6.2
org.springframework.boot
spring-boot-starter-validation
2.6.2
org.springframework.boot
spring-boot-starter-web
2.6.2
org.springframework.boot
spring-boot-starter-webflux
2.6.2
org.springframework.boot
spring-boot-starter-websocket
2.6.2
org.springframework.boot
spring-boot-starter-web-services
2.6.2
com.sun.xml.messaging.saaj
saaj-impl
${saaj-impl.version}
org.seleniumhq.selenium
selenium-api
${selenium.version}
org.seleniumhq.selenium
selenium-chrome-driver
${selenium.version}
org.seleniumhq.selenium
selenium-edge-driver
${selenium.version}
org.seleniumhq.selenium
selenium-firefox-driver
${selenium.version}
org.seleniumhq.selenium
selenium-ie-driver
${selenium.version}
org.seleniumhq.selenium
selenium-java
${selenium.version}
org.seleniumhq.selenium
selenium-opera-driver
${selenium.version}
org.seleniumhq.selenium
selenium-remote-driver
${selenium.version}
org.seleniumhq.selenium
selenium-safari-driver
${selenium.version}
org.seleniumhq.selenium
selenium-support
${selenium.version}
org.seleniumhq.selenium
htmlunit-driver
${selenium-htmlunit.version}
com.sendgrid
sendgrid-java
${sendgrid.version}
javax.servlet
javax.servlet-api
${servlet-api.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
org.slf4j
jul-to-slf4j
${slf4j.version}
org.slf4j
log4j-over-slf4j
${slf4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-ext
${slf4j.version}
org.slf4j
slf4j-jcl
${slf4j.version}
org.slf4j
slf4j-jdk14
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.slf4j
slf4j-nop
${slf4j.version}
org.slf4j
slf4j-simple
${slf4j.version}
org.yaml
snakeyaml
${snakeyaml.version}
org.apache.solr
solr-analysis-extras
${solr.version}
org.apache.solr
solr-analytics
${solr.version}
org.apache.solr
solr-cell
${solr.version}
org.apache.solr
solr-core
${solr.version}
org.apache.solr
solr-dataimporthandler
${solr.version}
org.apache.solr
solr-dataimporthandler-extras
${solr.version}
org.apache.solr
solr-langid
${solr.version}
org.apache.solr
solr-ltr
${solr.version}
org.apache.solr
solr-solrj
${solr.version}
org.slf4j
jcl-over-slf4j
org.apache.solr
solr-test-framework
${solr.version}
org.apache.solr
solr-velocity
${solr.version}
org.springframework.amqp
spring-amqp
${spring-amqp.version}
org.springframework.amqp
spring-rabbit
${spring-amqp.version}
org.springframework.amqp
spring-rabbit-stream
${spring-amqp.version}
org.springframework.amqp
spring-rabbit-junit
${spring-amqp.version}
org.springframework.amqp
spring-rabbit-test
${spring-amqp.version}
org.springframework.batch
spring-batch-core
${spring-batch.version}
org.springframework.batch
spring-batch-infrastructure
${spring-batch.version}
org.springframework.batch
spring-batch-integration
${spring-batch.version}
org.springframework.batch
spring-batch-test
${spring-batch.version}
org.springframework.hateoas
spring-hateoas
${spring-hateoas.version}
org.springframework.kafka
spring-kafka
${spring-kafka.version}
org.springframework.kafka
spring-kafka-test
${spring-kafka.version}
org.springframework.ldap
spring-ldap-core
${spring-ldap.version}
org.springframework.ldap
spring-ldap-core-tiger
${spring-ldap.version}
org.springframework.ldap
spring-ldap-ldif-batch
${spring-ldap.version}
org.springframework.ldap
spring-ldap-ldif-core
${spring-ldap.version}
org.springframework.ldap
spring-ldap-odm
${spring-ldap.version}
org.springframework.ldap
spring-ldap-test
${spring-ldap.version}
org.springframework.restdocs
spring-restdocs-asciidoctor
${spring-restdocs.version}
org.springframework.restdocs
spring-restdocs-core
${spring-restdocs.version}
org.springframework.restdocs
spring-restdocs-mockmvc
${spring-restdocs.version}
org.springframework.restdocs
spring-restdocs-restassured
${spring-restdocs.version}
org.springframework.restdocs
spring-restdocs-webtestclient
${spring-restdocs.version}
org.springframework.retry
spring-retry
${spring-retry.version}
org.springframework.ws
spring-ws-core
${spring-ws.version}
org.springframework.ws
spring-ws-security
${spring-ws.version}
org.springframework.ws
spring-ws-support
${spring-ws.version}
org.springframework.ws
spring-ws-test
${spring-ws.version}
org.springframework.ws
spring-xml
${spring-ws.version}
org.xerial
sqlite-jdbc
${sqlite-jdbc.version}
com.sun.mail
jakarta.mail
${sun-mail.version}
org.thymeleaf
thymeleaf
${thymeleaf.version}
org.thymeleaf
thymeleaf-spring5
${thymeleaf.version}
com.github.mxab.thymeleaf.extras
thymeleaf-extras-data-attribute
${thymeleaf-extras-data-attribute.version}
org.thymeleaf.extras
thymeleaf-extras-java8time
${thymeleaf-extras-java8time.version}
org.thymeleaf.extras
thymeleaf-extras-springsecurity5
${thymeleaf-extras-springsecurity.version}
nz.net.ultraq.thymeleaf
thymeleaf-layout-dialect
${thymeleaf-layout-dialect.version}
org.apache.tomcat
tomcat-annotations-api
${tomcat.version}
org.apache.tomcat
tomcat-jdbc
${tomcat.version}
org.apache.tomcat
tomcat-jsp-api
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-el
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-jasper
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-websocket
${tomcat.version}
com.unboundid
unboundid-ldapsdk
${unboundid-ldapsdk.version}
io.undertow
undertow-core
${undertow.version}
io.undertow
undertow-servlet
${undertow.version}
io.undertow
undertow-websockets-jsr
${undertow.version}
org.webjars
webjars-locator-core
${webjars-locator-core.version}
wsdl4j
wsdl4j
${wsdl4j.version}
org.xmlunit
xmlunit-assertj
${xmlunit2.version}
org.xmlunit
xmlunit-core
${xmlunit2.version}
org.xmlunit
xmlunit-legacy
${xmlunit2.version}
org.xmlunit
xmlunit-matchers
${xmlunit2.version}
org.xmlunit
xmlunit-placeholders
${xmlunit2.version}
com.datastax.oss
java-driver-bom
${cassandra-driver.version}
pom
import
io.dropwizard.metrics
metrics-bom
${dropwizard-metrics.version}
pom
import
org.codehaus.groovy
groovy-bom
${groovy.version}
pom
import
org.infinispan
infinispan-bom
${infinispan.version}
pom
import
com.fasterxml.jackson
jackson-bom
${jackson-bom.version}
pom
import
org.glassfish.jersey
jersey-bom
${jersey.version}
pom
import
org.eclipse.jetty
jetty-bom
${jetty.version}
pom
import
org.junit
junit-bom
${junit-jupiter.version}
pom
import
org.jetbrains.kotlin
kotlin-bom
${kotlin.version}
pom
import
org.jetbrains.kotlinx
kotlinx-coroutines-bom
${kotlin-coroutines.version}
pom
import
org.apache.logging.log4j
log4j-bom
${log4j2.version}
pom
import
io.micrometer
micrometer-bom
${micrometer.version}
pom
import
io.netty
netty-bom
${netty.version}
pom
import
com.oracle.database.jdbc
ojdbc-bom
${oracle-database.version}
pom
import
io.prometheus
simpleclient_bom
${prometheus-client.version}
pom
import
com.querydsl
querydsl-bom
${querydsl.version}
pom
import
io.r2dbc
r2dbc-bom
${r2dbc-bom.version}
pom
import
io.projectreactor
reactor-bom
${reactor-bom.version}
pom
import
io.rsocket
rsocket-bom
${rsocket.version}
pom
import
org.springframework.data
spring-data-bom
${spring-data-bom.version}
pom
import
org.springframework
spring-framework-bom
${spring-framework.version}
pom
import
org.springframework.integration
spring-integration-bom
${spring-integration.version}
pom
import
org.springframework.security
spring-security-bom
${spring-security.version}
pom
import
org.springframework.session
spring-session-bom
${spring-session-bom.version}
pom
import
org.codehaus.mojo
build-helper-maven-plugin
${build-helper-maven-plugin.version}
org.flywaydb
flyway-maven-plugin
${flyway.version}
pl.project13.maven
git-commit-id-plugin
${git-commit-id-plugin.version}
org.apache.johnzon
johnzon-maven-plugin
${johnzon.version}
org.jooq
jooq-codegen-maven
${jooq.version}
org.jetbrains.kotlin
kotlin-maven-plugin
${kotlin.version}
org.liquibase
liquibase-maven-plugin
${liquibase.version}
org.apache.maven.plugins
maven-antrun-plugin
${maven-antrun-plugin.version}
org.apache.maven.plugins
maven-assembly-plugin
${maven-assembly-plugin.version}
org.apache.maven.plugins
maven-clean-plugin
${maven-clean-plugin.version}
org.apache.maven.plugins
maven-compiler-plugin
${maven-compiler-plugin.version}
org.apache.maven.plugins
maven-dependency-plugin
${maven-dependency-plugin.version}
org.apache.maven.plugins
maven-deploy-plugin
${maven-deploy-plugin.version}
org.apache.maven.plugins
maven-enforcer-plugin
${maven-enforcer-plugin.version}
org.apache.maven.plugins
maven-failsafe-plugin
${maven-failsafe-plugin.version}
org.apache.maven.plugins
maven-help-plugin
${maven-help-plugin.version}
org.apache.maven.plugins
maven-install-plugin
${maven-install-plugin.version}
org.apache.maven.plugins
maven-invoker-plugin
${maven-invoker-plugin.version}
org.apache.maven.plugins
maven-jar-plugin
${maven-jar-plugin.version}
org.apache.maven.plugins
maven-javadoc-plugin
${maven-javadoc-plugin.version}
org.apache.maven.plugins
maven-resources-plugin
${maven-resources-plugin.version}
org.apache.maven.plugins
maven-shade-plugin
${maven-shade-plugin.version}
org.apache.maven.plugins
maven-source-plugin
${maven-source-plugin.version}
org.apache.maven.plugins
maven-surefire-plugin
${maven-surefire-plugin.version}
org.apache.maven.plugins
maven-war-plugin
${maven-war-plugin.version}
org.springframework.boot
spring-boot-maven-plugin
2.6.2
org.codehaus.mojo
versions-maven-plugin
${versions-maven-plugin.version}
org.codehaus.mojo
xml-maven-plugin
${xml-maven-plugin.version}
可以看到,这里把所有SpringBoot以来的基础库全部声明了,并且是一个版本仲裁中心,后续你要引用类似的库,不用再去声明版本了,这样减少了冲突,便于开发工具的统一。
2、各种starter
除了统一的父pom,我们还可以看到pom.xml里面声明的类似xxx-starter的maven依赖,这其实也是在做统一减少冲突,按照一类工具属性的维度,将相关的工具集做了捆绑,并且也做了标准版本的仲裁中心。比如我们看这个常见的
org.springframework.boot
spring-boot-starter-web
跟进去看一下
查看代码
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.springframework.boot
spring-boot-starter-web
2.6.2
spring-boot-starter-web
Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container
https://spring.io/projects/spring-boot
Pivotal Software, Inc.
https://spring.io
Apache License, Version 2.0
https://www.apache.org/licenses/LICENSE-2.0
Pivotal
info@pivotal.io
Pivotal Software, Inc.
https://www.spring.io
scm:git:git://github.com/spring-projects/spring-boot.git
scm:git:ssh://git@github.com/spring-projects/spring-boot.git
https://github.com/spring-projects/spring-boot
GitHub
https://github.com/spring-projects/spring-boot/issues
org.springframework.boot
spring-boot-starter
2.6.2
compile
org.springframework.boot
spring-boot-starter-json
2.6.2
compile
org.springframework.boot
spring-boot-starter-tomcat
2.6.2
compile
org.springframework
spring-web
5.3.14
compile
org.springframework
spring-webmvc
5.3.14
compile
我们可以看到,这个starter把所有跟web应用相关的依赖全部集中起来,包括嵌套的其他类似Tomcat的starter,还有spring-web,这里也可以看到,Spring-Boot还是基于Spring作为底层构建的。
总结:总的来说,SpringBoot的依赖配置就是靠这两个方面做了增强,目标都是一个简化配置,统一配置,减少冲突。父pom统一了基础配置,而各类starter按照各自的应用场景做了统一,这也看出了指责界限的分明和分离的思想。