网站开发背景400字,中国上海门户网站,保定做网站排名推广,见网页制作的公司网站前言
依赖管理有gradle和maven#xff0c;在这里选择比较常用和方便的Maven作为工程项目和依赖管理工具来搭建SpringCloud实战工程。主要用到的maven管理方式是多模块和bom依赖管理。
什么是maven的多模块依赖管理
Maven 多模块项目相对于单模块项目而言#xff0c;依赖是…前言
依赖管理有gradle和maven在这里选择比较常用和方便的Maven作为工程项目和依赖管理工具来搭建SpringCloud实战工程。主要用到的maven管理方式是多模块和bom依赖管理。
什么是maven的多模块依赖管理
Maven 多模块项目相对于单模块项目而言依赖是不共享的但父模块提供了全局共享依赖的功能可以针对不同模块所需要依赖的包进行分模块引入。具体如下
所有子模块都依赖的包如junit可以统一由父模块中的dependencies设置依赖。多个子模块但非全部子模块依赖的包可以在父模块中的dependencyManagement中统一管理依赖版本再由每个子模块自主引入依赖这样设置可以达到项目中多个子模块依赖的包版本统一的目的。单个子模块依赖的包可以直接交由这个子模块引入即可。但有时候出于对后续可能添加子模块考虑即使当前只有一个子模块依赖的包也可以统一交由父模块的dependencyManagement统一管理而如果确认后续不会再加子模块的可以按前者进行处理。
在父模块中可通过properties统一管理依赖包的版本让共享包也更加统一管理。
什么是maven的bom依赖管理
Maven 的 BOMBill of Materials依赖管理是一种用于集中管理项目依赖关系和版本的方式它提供了一种方便的方法来确保多个项目或模块在使用相同依赖时具有一致的版本。
BOM 通常是一个特殊的 Maven POMProject Object Model文件其中定义了项目所需的依赖项及其版本。通过在其他项目中引用这个 BOM这些项目将自动获取 BOM 中定义的依赖版本而无需明确指定每个依赖的版本。
这样做的好处是可以减少重复的依赖配置工作并确保在多个项目中使用相同的依赖版本从而减少由于依赖不一致导致的问题。此外BOM 还可以用于管理依赖的升级和版本控制只需在 BOM 中更新依赖的版本所有引用该 BOM 的项目都会自动获取最新的版本。
要使用 Maven 的 BOM 依赖管理通常需要执行以下步骤
创建或获取一个 BOM POM 文件其中定义了项目的依赖和版本信息。在需要使用 BOM 的项目中通过在dependencyManagement部分引用 BOM POM 文件。在项目的具体依赖部分可以直接使用 BOM 中定义的依赖而无需明确指定版本。
组件选型
在“SpringCloud2023最新版本该如何进行组件选型”一文中已经具体的介绍了SpringCloud的组件对比和选型具体可以查看合集里面的相关文档。
注册中心Spring Cloud Zookeeper负责服务的注册和发现。网关Spring Cloud Gateway作为外部请求的入口实现路由和负载均衡。云服务配置Spring Cloud Config用于管理服务的配置信息。熔断Sentinel提供熔断器功能实现服务的限流和降级。服务追踪Micrometer Tracing用于追踪和监控服务的性能和调用情况。测试集成JUnit 5 Spring Boot Test用于编写和执行单元测试。远程调用OpenFeign用于服务之间的远程调用。接口文档springdoc-openapi openapi3用于生成和管理 API 的文档。分布式事务Seata用于处理跨多个服务的事务。
版本选择
在“SpringCloud和SpringBoot的版本依赖该怎么选择”一文中已经具体的介绍了SpringCloud的版本如何选择具体可以查看合集里面的相关文档。
组件版本jdk17spring boot3.2.xspring cloud2023.0.xspring cloud alibaba2022.0.0.0还未更新但是兼容2023
为什么选择JDK17
选择JDK17的原因如下
JDK 17是 LTS长期支持版。JDK 17性能提升不少。大多数第三方框架和库都已经支持不会有什么大坑。JDK 17有更多的新特性支持。
Maven工程依赖说明
|-- banana-client1
|-- banana-client2
|-- banana-client3
|-- banana-client4-sentinel
|-- banana-client5-tracing
|-- banana-client6-test
|-- banana-common
| |-- banana-common-bom
| -- banana-common-core
|-- banana-config
|-- banana-gateway
|-- banana-gateway-sso
-- banana-seata-example根目录下的pom.xml负责管理整个项目的版本和依赖引入版本管理以及子模块的管理。banana-common-bom 负责管理整个公共依赖的版本比如undertow、swagger的版本。banana-common-core 负责管理整个公共组件的引入比如 hutool、validation、test等。gateway 相关项目为SCG相关工程。client 相关项目为springboot相关工程。其他工程会在后续的文章说明。欢迎持续关注。
顶级工程pom.xml配置
该maven的pom文件定义了如下内容
Maven 项目的模块列表Maven 项目的属性列表Maven 项目的依赖管理Maven 项目的仓库列表Maven 项目的构建配置
?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.xsd!-- Maven 项目的根节点 --modelVersion4.0.0/modelVersion!-- Maven 项目的groupId在 Maven 仓库中groupId 必须是唯一的 --groupIdio.rainforest/groupId!-- Maven 项目的 artifactId可以包含多个模块 --artifactIdbanana/artifactId!-- Maven 项目的版本号 --version1.0/version!-- Maven 项目的打包方式这里是 pom --packagingpom/packaging!-- Maven 项目的模块列表 --modulesmodulebanana-gateway/modulemodulebanana-config/modulemodulebanana-common/modulemodulebanana-client1/modulemodulebanana-client2/modulemodulebanana-client3/modulemodulebanana-client4-sentinel/modulemodulebanana-client5-tracing/modulemodulebanana-client6-test/modulemodulebanana-seata-example/modulemodulebanana-gateway-sso/module/modules!-- Maven 项目的属性列表 --properties!-- Maven 编译器的 source 版本 --maven.compiler.source17/maven.compiler.source!-- Maven 编译器的 target 版本 --maven.compiler.target17/maven.compiler.target!-- 项目构建的源编码 --project.build.sourceEncodingUTF-8/project.build.sourceEncoding!-- Spring Boot 的版本 --spring-boot.version3.2.3/spring-boot.version!-- Spring Cloud 的版本 --spring-cloud.version2023.0.0/spring-cloud.version!-- Spring Cloud Alibaba 的版本 --spring-cloud-alibaba.version2022.0.0.0/spring-cloud-alibaba.version/properties!-- Maven 项目的依赖管理 --dependencyManagement!-- Maven 项目的依赖列表 --dependencies!-- banana 公共版本定义 --dependencygroupIdio.rainforest/groupIdartifactIdbanana-common-bom/artifactIdversion${project.version}/versiontypepom/typescopeimport/scope/dependency!-- Spring Boot 依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency!-- Spring Cloud 依赖 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency!-- Spring Cloud Alibaba 依赖 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement!-- Maven 项目的仓库列表 --repositories!-- Maven 中央仓库的配置 --repositoryidcentral/idnameCentral Repository/nameurlhttps://mirrors.huaweicloud.com/repository/maven//urllayoutdefault/layoutsnapshotsenabledfalse/enabled/snapshots/repository/repositories!-- Maven 项目的构建配置 --build!-- Maven 项目构建的最终名称 --finalName${project.name}/finalName!-- Maven 项目的资源配置 --resources!-- 资源文件所在的目录 --resourcedirectorysrc/main/resources/directory!-- 对资源文件进行过滤 --filteringtrue/filtering/resource/resources!-- Maven 项目的插件管理 --pluginManagement!-- Maven 项目的插件列表 --plugins!-- Spring Boot Maven 插件的配置 --plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfiguration!-- 项目构建的最终名称 --finalName${project.build.finalName}/finalName!-- 启用 Spring Boot 的分层 --layersenabledtrue/enabled/layers/configuration!-- Maven 插件的执行配置 --executions!-- Maven 插件的执行目标 --executiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/pluginManagement/build
/project工程的公用依赖bom配置
该maven的pom文件定义了如下内容
Maven 项目的属性列表包含版本等信息Maven 项目使用到的依赖版本管理
?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.xsdgroupIdio.rainforest/groupIdartifactIdbanana-common-bom/artifactIdversion1.0/versionmodelVersion4.0.0/modelVersionpackagingpom/packagingdescriptionbanana-common-bom 公共依赖管理/descriptionpropertiesbanana.common.version${project.version}/banana.common.versionspring-boot.version3.1.3/spring-boot.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodinglog4j2.version2.17.1/log4j2.versionmaven.compiler.target17/maven.compiler.targetmaven.compiler.source17/maven.compiler.sourcegit.commit.plugin4.9.9/git.commit.pluginspring.checkstyle.plugin0.0.39/spring.checkstyle.pluginfastjson.version1.2.83/fastjson.versionspringdoc.version2.1.0/springdoc.versionswagger.core.version2.2.14/swagger.core.versionmybatis-plus.version3.5.3.2/mybatis-plus.versionmysql.version8.0.33/mysql.versiondynamic-ds.version4.1.3/dynamic-ds.versionseata.version1.6.1/seata.versionexcel.version3.1.0/excel.versionasm.version7.1/asm.versionsms.version3.0.0/sms.versionjaxb.version2.3.5/jaxb.versionshardingsphere.version5.4.0/shardingsphere.versionhutool.version5.8.21/hutool.versionmica.version3.0.8/mica.versionsentinel.version1.8.4/sentinel.version/properties!-- 定义全局jar版本,模块使用需要再次引入但不用写版本号--dependencyManagementdependenciesdependencygroupIdio.rainforest/groupIdartifactIdbanana-common-core/artifactIdversion${banana.common.version}/version/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdversion${mysql.version}/version/dependency!--springdoc --dependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webflux-ui/artifactIdversion${springdoc.version}/version/dependencydependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webmvc-api/artifactIdversion${springdoc.version}/version/dependencydependencygroupIdio.swagger.core.v3/groupIdartifactIdswagger-annotations-jakarta/artifactIdversion${swagger.core.version}/version/dependency!--fastjson 版本--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion${fastjson.version}/version/dependency!-- 多数据源依赖 --dependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot3-starter/artifactIdversion${dynamic-ds.version}/version/dependency!-- 阿里云短信下发 --dependencygroupIdio.springboot.sms/groupIdartifactIdaliyun-sms-spring-boot-starter/artifactIdversion${sms.version}/version/dependency!-- seata kryo 序列化--dependencygroupIdio.seata/groupIdartifactIdseata-serializer-kryo/artifactIdversion${seata.version}/version/dependency!--orm 相关--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion${mybatis-plus.version}/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-extension/artifactIdversion${mybatis-plus.version}/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-annotation/artifactIdversion${mybatis-plus.version}/version/dependency!--hutool bom 工具类--dependencygroupIdcn.hutool/groupIdartifactIdhutool-bom/artifactIdversion${hutool.version}/versiontypepom/typescopeimport/scope/dependency!--mica bom 工具类--dependencygroupIdnet.dreamlu/groupIdartifactIdmica-bom/artifactIdversion${mica.version}/versiontypepom/typescopeimport/scope/dependency!--web 模块--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion${spring-boot.version}/versionexclusions!--排除tomcat依赖--exclusionartifactIdspring-boot-starter-tomcat/artifactIdgroupIdorg.springframework.boot/groupId/exclusion/exclusions/dependencydependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-openapi3-jakarta-spring-boot-starter/artifactIdversion4.3.0/version/dependency/dependencies/dependencyManagementbuildplugins!--打包jar 与git commit 关联插件--plugingroupIdio.github.git-commit-id/groupIdartifactIdgit-commit-id-maven-plugin/artifactIdversion${git.commit.plugin}/version/plugin!--代码格式插件默认使用spring 规则--plugingroupIdio.spring.javaformat/groupIdartifactIdspring-javaformat-maven-plugin/artifactIdversion${spring.checkstyle.plugin}/version/plugin/plugins/build/project源码信息
和“SpringCloud实战”对应的源码信息如下
github https://github.com/r0ad/spring-cloud-examplegitee https://gitee.com/r0ad/spring-cloud-example
关于作者
来自一线全栈程序员nine的八年探索与实践持续迭代中。欢迎关注“雨林寻北”或添加个人卫星codetrend备注技术。