厦门网站建设价格,餐饮网站建设的毕设报告,新郑网站开发,申请新账号✅作者简介#xff1a;大家好#xff0c;我是Leo#xff0c;热爱Java后端开发者#xff0c;一个想要与大家共同进步的男人#x1f609;#x1f609; #x1f34e;个人主页#xff1a;Leo的博客 #x1f49e;当前专栏#xff1a; 循序渐进学SpringBoot ✨特色专栏大家好我是Leo热爱Java后端开发者一个想要与大家共同进步的男人 个人主页Leo的博客 当前专栏 循序渐进学SpringBoot ✨特色专栏 MySQL学习 本文内容理解pom.xml中的parent标签 个人知识库 Leo知识库欢迎大家访问
1.前言☕
大家好我是Leo哥今天给大家带来关于精品SpringBoot专栏暂且就给他起名为循序渐进学SpringBoot这里我参考了我上一个专栏循序渐进学SpringSecurity6。有需要的朋友可以抓紧学习来哈带你从SpringSecurity从零到实战项目。好了我们进入正题为什么会有SpringBoot这个专栏呢是这样的今年Leo哥也是正在重塑知识体系从基础到框架而SpringBoot又是我们框架中的核心我觉得很有必要通过以博客的形式将我的知识系列进行输出同时也锻炼一下自己的写作能力如果能帮到大家那就更好啦!!!本地系列教程会从SpringBoot基础讲起会以知识点实例项目的学习模式由浅入深对Spring Boot框架进行学习使用。好了话不多说让我们开始吧。
2.回顾
上一篇文章 我们学习了Spring Boot 项目的几种创建方式这几种创建方式无论是哪一种创建成功后pom.xml 坐标文件中都有如下一段引用
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/
/parent有同学可能要问Leo哥这个不就是在Parent中去锁定版本嘛没啥大不了了的嘛。
确实但是Parent里面的门道可不止于此我们这篇文章就一起来探索一下。
3.Parent概述
在Maven项目中的pom.xml文件是这个项目的核心配置文件。parent标签在这个配置文件中有着特殊的作用。简单来说parent标签是用来指明当前Maven项目继承自哪个父项目的。这里涉及到Maven的继承机制我们可以从几个方面来理解这个标签的意义和作用
3.1 继承
在Maven中通过使用parent标签可以使得当前项目继承父项目的配置。这里的配置可以是依赖管理、插件配置、属性等。例如如果很多模块都需要用到同样的版本管理或者构建配置可以通过一个公共的父项目来管理这些共享配置子项目通过指定父项目来继承这些配置。
3.2 聚合和继承的区别
在Maven中有两种常见的多模块的项目结构 - 聚合Aggregation和继承Inheritance。parent标签通常是继承的体现。如果一个项目只是简单地聚合其他模块不一定用到parent标签它会用modules标签列出所有子模块。但是当这些模块需要共享配置时通常会有一个父项目各个子项目通过parent标签来指定这个父项目从而实现配置的继承。
3.3 parent标签的内容
parent标签通常包含以下几个主要元素
groupId: 父项目的group ID。artifactId: 父项目的artifact ID。version: 父项目的版本号。relativePath: 父POM的相对路径。如果不指定默认查找../pom.xml。
例如
parentgroupIdcom.example/groupIdartifactIdexample-parent/artifactIdversion1.0.0/version
/parent这段代码表示当前项目的父项目有groupId为com.exampleartifactId为example-parent版本为1.0.0。
3.4 版本管理
在父项目中定义的dependencyManagement部分可以设定依赖的版本这样子模块只需声明要使用的依赖而不需要每个子模块单独指定版本号这大大方便了版本管理。
3.5 插件管理
父项目同样可以定义pluginManagement来设定插件的版本和配置子项目也可以继承父项目中的插件配置。
4.Parent的作用
使用 Maven 是为了更好的帮项目管理包依赖Maven 的核心就是pom.xml。当我们需要引入一个jar包时在pom文件中加上就可以从仓库中依赖到相应的jar包。
现在有这样一个场景有两个web项目A、B一个java项目C它们都需要用到同一个jar包example.jar。如果分别在三个项目的pom文件中定义各自对example.jar的依赖那么当example.jar的版本发生变化时三个项目的pom文件都要改项目越多要改的地方就越多很麻烦。这时候就需要用到parent标签, 我们创建一个parent项目打包类型为pomparent项目中不存放任何代码只是管理多个项目之间公共的依赖。在parent项目的pom文件中定义对example.jar的依赖ABC三个子项目中只需要定义parent标签中写上parent项目的pom坐标就可以引用到example.jar了。
5.Parent的功能
当我们创建一个SpringBoot项目的时候可以继承自一个 spring-boot-starter-parent 也可以不继承自它。那么他到底有哪些功能呢
定义了 Java 编译版本为 1.8 。使用 UTF-8 格式编码。继承自 spring-boot-dependencies这个里边定义了依赖的版本也正是因为继承了这个依赖所以我们在写依赖时才不需要写版本号。执行打包操作的配置。自动化的资源过滤。自动化的插件配置。针对 application.properties 和 application.yml 的资源过滤包括通过 profile 定义的不同环境的配置文件例如 application-dev.properties 和 application-dev.yml。
我们下面来看一个实例
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.javatop/groupIdartifactIdLeo-springboot-tutorial/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packagingmodulesmodulespringboot-init/modulemodulespringboot-demo/module/modulespropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingrevision2.3.12.RELEASE/revision/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${revision}/versiontypepom/typescopeimport/scope/dependency!--spring-boot--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion${revision}/version/dependency!--SpringBootTest--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdversion${revision}/versionscopetest/scope/dependency/dependencies/dependencyManagement/project这里是我们上一篇创建SpringBoot项目对应的POM文件。 可以看出来我们并没有直接去继承 spring-boot-starter-parent而是通过dependencyMangement然后再properties标签中去锁定他的版本。 这样的话以后我们创建的子项目一旦继承了我们父项目我们就不需要再去考虑各种版本问题了所有的版本信息只需要在父项目的dependencyMangement进行锁定即可。 6.Parent源码
我们创建SpringBoot项目之后我们可以在本地 Maven 仓库中看到看到这个具体的 parent 文件。
笔者这里的路径是D:\software\maven-repository\org\springframework\boot\spring-boot-dependencies\2.3.12.RELEASE大家可以按需查找。
当然也可以通过我们POM中的代码点击过去。 就能看到以下源码了。 我们可以看到它继承自 spring-boot-dependencies 这里保存了基本的依赖信息另外我们也可以看到项目的编码格式JDK 的版本等信息当然也有我们前面提到的数据过滤信息。最后我们再根据它的 parent 中指定的 spring-boot-dependencies 位置来看看 spring-boot-dependencies 中的定义
propertiesactivemq.version5.15.15/activemq.versionantlr2.version2.7.7/antlr2.versionappengine-sdk.version1.9.89/appengine-sdk.versionartemis.version2.12.0/artemis.versionaspectj.version1.9.6/aspectj.versionassertj.version3.16.1/assertj.versionatomikos.version4.0.6/atomikos.versionawaitility.version4.0.3/awaitility.versionbitronix.version2.1.4/bitronix.versionbuild-helper-maven-plugin.version3.1.0/build-helper-maven-plugin.versionbyte-buddy.version1.10.22/byte-buddy.versioncaffeine.version2.8.8/caffeine.versioncassandra-driver.version4.6.1/cassandra-driver.versionclassmate.version1.5.1/classmate.versioncommons-codec.version1.14/commons-codec.versioncommons-dbcp2.version2.7.0/commons-dbcp2.versioncommons-lang3.version3.10/commons-lang3.versioncommons-pool.version1.6/commons-pool.versioncommons-pool2.version2.8.1/commons-pool2.versioncouchbase-client.version3.0.10/couchbase-client.versiondb2-jdbc.version11.5.5.0/db2-jdbc.versiondependency-management-plugin.version1.0.11.RELEASE/dependency-management-plugin.versionderby.version10.14.2.0/derby.versiondropwizard-metrics.version4.1.22/dropwizard-metrics.versionehcache.version2.10.9.2/ehcache.versionehcache3.version3.8.1/ehcache3.versionelasticsearch.version7.6.2/elasticsearch.versionembedded-mongo.version2.2.0/embedded-mongo.versionexec-maven-plugin.version1.6.0/exec-maven-plugin.versionflatten-maven-plugin.version1.2.7/flatten-maven-plugin.versionflyway.version6.4.4/flyway.versionfreemarker.version2.3.31/freemarker.versiongit-commit-id-plugin.version3.0.1/git-commit-id-plugin.versionglassfish-el.version3.0.3/glassfish-el.versionglassfish-jaxb.version2.3.4/glassfish-jaxb.versiongroovy.version2.5.14/groovy.versiongson.version2.8.7/gson.versionh2.version1.4.200/h2.versionhamcrest.version2.2/hamcrest.versionhazelcast.version3.12.12/hazelcast.versionhazelcast-hibernate5.version1.3.2/hazelcast-hibernate5.versionhibernate.version5.4.32.Final/hibernate.versionhibernate-validator.version6.1.7.Final/hibernate-validator.versionhikaricp.version3.4.5/hikaricp.versionhsqldb.version2.5.2/hsqldb.versionhtmlunit.version2.40.0/htmlunit.versionhttpasyncclient.version4.1.4/httpasyncclient.versionhttpclient.version4.5.13/httpclient.versionhttpcore.version4.4.14/httpcore.versioninfinispan.version10.1.8.Final/infinispan.versioninfluxdb-java.version2.18/influxdb-java.versionjackson-bom.version2.11.4/jackson-bom.versionjakarta-activation.version1.2.2/jakarta-activation.versionjakarta-annotation.version1.3.5/jakarta-annotation.versionjakarta-jms.version2.0.3/jakarta-jms.versionjakarta-json.version1.1.6/jakarta-json.versionjakarta-json-bind.version1.0.2/jakarta-json-bind.versionjakarta-mail.version1.6.7/jakarta-mail.versionjakarta-persistence.version2.2.3/jakarta-persistence.versionjakarta-servlet.version4.0.4/jakarta-servlet.versionjakarta-servlet-jsp-jstl.version1.2.7/jakarta-servlet-jsp-jstl.versionjakarta-transaction.version1.3.3/jakarta-transaction.versionjakarta-validation.version2.0.2/jakarta-validation.versionjakarta-websocket.version1.1.2/jakarta-websocket.versionjakarta-ws-rs.version2.1.6/jakarta-ws-rs.versionjakarta-xml-bind.version2.3.3/jakarta-xml-bind.versionjakarta-xml-soap.version1.4.2/jakarta-xml-soap.versionjakarta-xml-ws.version2.3.3/jakarta-xml-ws.versionjanino.version3.1.4/janino.versionjavax-activation.version1.2.0/javax-activation.versionjavax-annotation.version1.3.2/javax-annotation.versionjavax-cache.version1.1.1/javax-cache.versionjavax-jaxb.version2.3.1/javax-jaxb.versionjavax-jaxws.version2.3.1/javax-jaxws.versionjavax-jms.version2.0.1/javax-jms.versionjavax-json.version1.1.4/javax-json.versionjavax-jsonb.version1.0/javax-jsonb.versionjavax-mail.version1.6.2/javax-mail.versionjavax-money.version1.0.3/javax-money.versionjavax-persistence.version2.2/javax-persistence.versionjavax-transaction.version1.3/javax-transaction.versionjavax-validation.version2.0.1.Final/javax-validation.versionjavax-websocket.version1.1/javax-websocket.versionjaxen.version1.2.0/jaxen.versionjaybird.version3.0.11/jaybird.versionjboss-logging.version3.4.2.Final/jboss-logging.versionjboss-transaction-spi.version7.6.1.Final/jboss-transaction-spi.versionjdom2.version2.0.6/jdom2.versionjedis.version3.3.0/jedis.versionjersey.version2.30.1/jersey.versionjetty-el.version8.5.54/jetty-el.versionjetty-jsp.version2.2.0.v201112011158/jetty-jsp.versionjetty-reactive-httpclient.version1.1.9/jetty-reactive-httpclient.versionjetty.version9.4.42.v20210604/jetty.versionjmustache.version1.15/jmustache.versionjohnzon.version1.2.13/johnzon.versionjolokia.version1.6.2/jolokia.versionjooq.version3.13.6/jooq.versionjson-path.version2.4.0/json-path.versionjson-smart.version2.3.1/json-smart.versionjsonassert.version1.5.0/jsonassert.versionjstl.version1.2/jstl.versionjtds.version1.3.1/jtds.versionjunit.version4.13.2/junit.versionjunit-jupiter.version5.6.3/junit-jupiter.versionkafka.version2.5.1/kafka.versionkotlin.version1.3.72/kotlin.versionkotlin-coroutines.version1.3.8/kotlin-coroutines.versionlettuce.version5.3.7.RELEASE/lettuce.versionliquibase.version3.8.9/liquibase.versionlog4j2.version2.13.3/log4j2.versionlogback.version1.2.3/logback.versionlombok.version1.18.20/lombok.versionmariadb.version2.6.2/mariadb.versionmaven-antrun-plugin.version1.8/maven-antrun-plugin.versionmaven-assembly-plugin.version3.3.0/maven-assembly-plugin.versionmaven-clean-plugin.version3.1.0/maven-clean-plugin.versionmaven-compiler-plugin.version3.8.1/maven-compiler-plugin.versionmaven-dependency-plugin.version3.1.2/maven-dependency-plugin.versionmaven-deploy-plugin.version2.8.2/maven-deploy-plugin.versionmaven-enforcer-plugin.version3.0.0-M3/maven-enforcer-plugin.versionmaven-failsafe-plugin.version2.22.2/maven-failsafe-plugin.versionmaven-help-plugin.version3.2.0/maven-help-plugin.versionmaven-install-plugin.version2.5.2/maven-install-plugin.versionmaven-invoker-plugin.version3.2.2/maven-invoker-plugin.versionmaven-jar-plugin.version3.2.0/maven-jar-plugin.versionmaven-javadoc-plugin.version3.2.0/maven-javadoc-plugin.versionmaven-resources-plugin.version3.1.0/maven-resources-plugin.versionmaven-shade-plugin.version3.2.4/maven-shade-plugin.versionmaven-source-plugin.version3.2.1/maven-source-plugin.versionmaven-surefire-plugin.version2.22.2/maven-surefire-plugin.versionmaven-war-plugin.version3.2.3/maven-war-plugin.versionmicrometer.version1.5.14/micrometer.versionmimepull.version1.9.14/mimepull.versionmockito.version3.3.3/mockito.versionmongodb.version4.0.6/mongodb.versionmssql-jdbc.version7.4.1.jre8/mssql-jdbc.versionmysql.version8.0.25/mysql.versionnekohtml.version1.9.22/nekohtml.versionneo4j-ogm.version3.2.24/neo4j-ogm.versionnetty.version4.1.65.Final/netty.versionnetty-tcnative.version2.0.39.Final/netty-tcnative.versionnio-multipart-parser.version1.1.0/nio-multipart-parser.versionoauth2-oidc-sdk.version7.1.3/oauth2-oidc-sdk.versionnimbus-jose-jwt.version8.19/nimbus-jose-jwt.versionojdbc.version19.3.0.0/ojdbc.versionokhttp3.version3.14.9/okhttp3.versionoracle-database.version19.3.0.0/oracle-database.versionpooled-jms.version1.1.2/pooled-jms.versionpostgresql.version42.2.20/postgresql.versionprometheus-pushgateway.version0.9.0/prometheus-pushgateway.versionquartz.version2.3.2/quartz.versionquerydsl.version4.3.1/querydsl.versionr2dbc-bom.versionArabba-SR10/r2dbc-bom.versionrabbit-amqp-client.version5.9.0/rabbit-amqp-client.versionreactive-streams.version1.0.3/reactive-streams.versionreactor-bom.versionDysprosium-SR20/reactor-bom.versionrest-assured.version3.3.0/rest-assured.versionrsocket.version1.0.5/rsocket.versionrxjava.version1.3.8/rxjava.versionrxjava-adapter.version1.2.1/rxjava-adapter.versionrxjava2.version2.2.21/rxjava2.versionsaaj-impl.version1.5.3/saaj-impl.versionselenium.version3.141.59/selenium.versionselenium-htmlunit.version2.40.0/selenium-htmlunit.versionsendgrid.version4.4.8/sendgrid.versionservlet-api.version4.0.1/servlet-api.versionslf4j.version1.7.30/slf4j.versionsnakeyaml.version1.26/snakeyaml.versionsolr.version8.5.2/solr.versionspring-amqp.version2.2.18.RELEASE/spring-amqp.versionspring-batch.version4.2.7.RELEASE/spring-batch.versionspring-data-releasetrain.versionNeumann-SR9/spring-data-releasetrain.versionspring-framework.version5.2.15.RELEASE/spring-framework.versionspring-hateoas.version1.1.5.RELEASE/spring-hateoas.versionspring-integration.version5.3.8.RELEASE/spring-integration.versionspring-kafka.version2.5.14.RELEASE/spring-kafka.versionspring-ldap.version2.3.4.RELEASE/spring-ldap.versionspring-restdocs.version2.0.5.RELEASE/spring-restdocs.versionspring-retry.version1.2.5.RELEASE/spring-retry.versionspring-security.version5.3.9.RELEASE/spring-security.versionspring-session-bom.versionDragonfruit-SR3/spring-session-bom.versionspring-ws.version3.0.10.RELEASE/spring-ws.versionsqlite-jdbc.version3.31.1/sqlite-jdbc.versionsun-mail.version1.6.7/sun-mail.versionthymeleaf.version3.0.12.RELEASE/thymeleaf.versionthymeleaf-extras-data-attribute.version2.0.1/thymeleaf-extras-data-attribute.versionthymeleaf-extras-java8time.version3.0.4.RELEASE/thymeleaf-extras-java8time.versionthymeleaf-extras-springsecurity.version3.0.4.RELEASE/thymeleaf-extras-springsecurity.versionthymeleaf-layout-dialect.version2.4.1/thymeleaf-layout-dialect.versiontomcat.version9.0.46/tomcat.versionunboundid-ldapsdk.version4.0.14/unboundid-ldapsdk.versionundertow.version2.1.7.Final/undertow.versionversions-maven-plugin.version2.7/versions-maven-plugin.versionwebjars-hal-browser.version3325375/webjars-hal-browser.versionwebjars-locator-core.version0.45/webjars-locator-core.versionwsdl4j.version1.6.3/wsdl4j.versionxml-maven-plugin.version1.0.2/xml-maven-plugin.versionxmlunit2.version2.7.0/xmlunit2.version/properties这就是我们为什么可以在dependencyManagement可以直接锁定版本的原因了。
7.文末推荐
如果你是刚学完SSM框架如果你想学系统的学习SpringBoot如果你想使用SpringBoot去集成各种其他组件那么我这份循序渐进学SpringBoot一定是首选带你从零到深入学习SpringBoot。抓紧订阅起来吧。用知识点案例项目解读的学习模式由浅入深对Spring Boot框架进行学习使用。