当前位置: 首页 > news >正文

Maven高级—分模块设计与开发、继承、聚合和私服

分模块设计与开发分模块设计策略这里我们采用策略一进行演示步骤一创建tilas-pojo这里我们不需要选择springboot框架因为我们的实体类不需要进行什么框架操作这里我们要引入lombok的依赖(缺什么依赖引入什么依赖注入依赖版本一致)但这里由于我们采用的并不是SpringBoot框架所以引入依赖版本号不可省略Spring Boot 可以省略版本号是因为它引入了「父工程」spring-boot-starter-parent里面已经统一声明了常用依赖的版本。这就是所谓的「依赖版本仲裁」。tlias-utils这个模块的创建同样如此这里有的时候引入依赖IDEA可能不识别剪切重新粘贴一遍即可步骤二在tlias-web-management中引入如上两模块的依赖继承parent工程之间的依赖关系继承便于维护和管理我们的依赖我们使用parent这个标签来指明工程与工程之间的依赖关系对于我们本次项目的依赖关系如下Maven打包方式jar普通模块打包springboot项目基本都是jar包内嵌tomcat运行war普通web程序打包需要部署在外部的tomcat服务器中运行pom父工程或聚合工程该模块不写代码仅进行依赖管理1.实现1). 创建maven模块 tlias-parent 该工程为父工程设置打包方式pom(默认jar)。src则直接删掉父工程tlias-parent的pom.xml文件配置如下并设置packaging类型为pompackagingpom/packaging parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.5/version relativePath/ /parent groupIdcom.itheima/groupId artifactIdtilas-parent/artifactId version1.0-SNAPSHOT/version2). 在子工程tlias-pojo、tlias-utils、tlias-web-management的pom.xml文件中配置继承关系tlias-web-management和tlias-pojo把原本的springboot的parent依赖删除掉即可注意在子工程中配置了继承关系之后坐标中的groupId和version是可以省略的因为会自动继承父工程的 。parent groupIdcom.itheima/groupId artifactIdtilas-parent/artifactId version1.0-SNAPSHOT/versionrelativePath../tilas-parent/relativePath/parent artifactIdtilas-web-management/artifactId这里路径要设置为相对路径即../父工程模块名3). 在父工程中配置各个工程共有的依赖子工程会自动继承父工程的依赖dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency /dependencies2.版本锁定dependencyManagement如果项目拆分的模块比较多每一次更换版本我们都得找到这个项目中的每一个模块一个一个的更改。 很容易就会出现遗漏掉一个模块忘记更换版本的情况。在maven中可以在父工程的pom文件中通过 dependencyManagement 来统一管理依赖版本。在父工程中配置!--统一管理依赖版本-- dependencyManagement dependencies !--JWT令牌-- dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId version0.9.1/version /dependency /dependencies /dependencyManagement之后子工程便可以省略version的配置接下来我们就可以将tlias-utils模块中单独配置的依赖将其版本统一交给tlias-parent进行统一管理。!--统一管理依赖版本-- dependencyManagement dependencies !--阿里云OSS-- dependency groupIdcom.aliyun.oss/groupId artifactIdaliyun-sdk-oss/artifactId version3.15.1/version /dependency dependency groupIdjavax.xml.bind/groupId artifactIdjaxb-api/artifactId version2.3.1/version /dependency dependency groupIdjavax.activation/groupId artifactIdactivation/artifactId version1.1.1/version /dependency !-- no more than 2.3.3-- dependency groupIdorg.glassfish.jaxb/groupId artifactIdjaxb-runtime/artifactId version2.3.3/version /dependency !--JWT-- dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId version0.9.1/version /dependency /dependencies /dependencyManagement同样的删除子工程的版本标签3.属性配置我们也可以通过自定义属性及属性引用的形式在父工程中将依赖的版本号进行集中管理维护。 具体语法为1). 自定义属性propertieslombok.version1.18.30/lombok.version /properties2). 引用属性dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version${lombok.version}/version /dependency面试题dependencyManagement与dependencies的区别是什么?dependencies是直接依赖在父工程配置了依赖子工程会直接继承下来。dependencyManagement是统一管理依赖版本不会直接依赖还需要在子工程中引入所需依赖(无需指定版本)聚合modules聚合将多个模块组织成一个整体同时进行项目的构建。聚合工程一个不具有业务功能的“空”工程有且仅有一个pom文件 【PS一般来说继承关系中的父工程与聚合关系中的聚合工程是同一个】作用快速构建项目无需根据依赖关系手动构建直接在聚合工程上构建即可这里我们直接在父工程配置modules标签即可modules module../tilas-pojo/module module../tilas-utils/module module../tilas-web-management/module /modules继承与聚合对比作用聚合用于快速构建项目继承用于简化依赖配置、统一管理依赖相同点聚合与继承的pom.xml文件打包方式均为pom通常将两种关系制作到同一个pom文件中聚合与继承均属于设计型模块并无实际的模块内容不同点聚合是在聚合工程中配置关系聚合可以感知到参与聚合的模块有哪些继承是在子模块中配置关系父模块无法感知哪些子模块继承了自己私服1.介绍私服是一种特殊的远程仓库它是架设在局域网内的仓库服务用来代理位于外部的中央仓库用于解决团队内部的资源共享与资源同步问题。依赖查找顺序本地仓库私服仓库中央仓库注意事项私服在企业项目开发中一个项目/公司只需要一台即可无需我们自己搭建会使用即可。2.资源上传与下载资源上传与下载我们需要做三步配置执行一条指令。第一步配置在maven的配置文件中配置访问私服仓库的用户名、密码。第二步配置在项目的pom.xml文件中配置上传到私服的仓库(url地址)该配置其实也支持配在setting.xml中第三步配置在maven的配置文件中配置私服从公共仓库拉回来的依赖存放的仓库(url地址)。配置好了上述三步之后要上传资源到私服仓库就执行maven生命周期deploy。简单来说就是在pom文件中配置上传的私服仓库地址在maven的文件中进行配置私服用户名和密码以及下载的地址私服仓库说明RELEASE存储自己开发的RELEASE发布版本的资源。SNAPSHOT存储自己开发的SNAPSHOT发布版本的资源。Central存储的是从中央仓库下载下来的依赖。项目版本说明RELEASE(发布版本)功能趋于稳定、当前更新停止可以用于发行的版本存储在私服中的RELEASE仓库中。SNAPSHOT(快照版本)功能不稳定、尚处于开发中的版本即快照版本存储在私服的SNAPSHOT仓库中。具体操作1.设置私服的访问用户名/密码在自己maven安装目录下的conf/settings.xml中的servers中配置serveridmaven-releases/idusernameadmin/usernamepasswordadmin/password/serverserveridmaven-snapshots/idusernameadmin/usernamepasswordadmin/password/server!--如果不涉及到下载的可以不配置这个--serveridmaven-public/idusernameadmin/usernamepasswordadmin/password/server2.设置从公共仓库拉回来的依赖存放的仓库(在自己maven安装目录下的conf/settings.xml中的mirrors、profiles中配置mirrors配置mirroridmaven-public/idmirrorOf*/mirrorOfurlhttp://localhost:8081/repository/maven-public//url/mirrorprofiles配置profileidallow-snapshots/idactivationactiveByDefaulttrue/activeByDefault/activationrepositoriesrepositoryidmaven-public/idurlhttp://localhost:8081/repository/maven-public//urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository/repositories/profile3.IDEA的maven工程的pom文件中配置上传发布地址(直接在tlias-parent中配置发布地址)distributionManagement!-- release版本的发布地址 --repositoryidmaven-releases/idurlhttp://localhost:8081/repository/maven-releases//url/repository!-- snapshot版本的发布地址 --snapshotRepositoryidmaven-snapshots/idurlhttp://localhost:8081/repository/maven-snapshots//url/snapshotRepository/distributionManagement配置完成之后我们就可以在tlias-parent中执行deploy生命周期将项目发布到私服仓库中。中央仓库的包私服会缓存到自己的代理仓库如 maven-central同时也会下载到你电脑的本地仓库。公司自己的包私服存到 release/snapshot 仓库也可能会下载到本地仓库。两者都会到本地但私服里也都会有一份自己的包在 release/snapshot中央的包在代理仓库。
http://www.gsyq.cn/news/1386988.html

相关文章:

  • 从‘虚轴’到‘实轴’:深入解读汇川Inoproshop中CIA402轴的两种工作模式与应用场景
  • Spine动画在Unity里卡顿?性能优化实战:从Draw Call、材质实例化到网格合并
  • 给OpenGL学完就忘的你:用Unity Shader重温渲染管线,打通任督二脉
  • ARM SPE技术:硬件级性能分析与优化实践
  • TVA视觉智能体专栏(五):2026工业视觉行业复盘:低端调参彻底内卷,TVA智能体成工程师高薪破局核心
  • 没有银弹,从来就没有
  • Redis分布式锁进阶第十六篇
  • 教育科技产品集成AI批改功能时如何通过Taotoken保障服务稳定性
  • ARM调试与复位机制详解及实践技巧
  • LMD优化器:低精度训练与MXFP6格式的突破
  • FlashAttention与长视频理解:60分钟视频的单轮推理
  • 贪吃蛇游戏 模拟实现
  • 01华夏之光永存:马斯克火星窗口期与轨道运算问题全链条解决方案
  • 告别拖拽式布局:用IntelliJ IDEA + SceneBuilder 8.5.0高效构建JavaFX桌面应用界面
  • 为什么你的灰度总在凌晨2点崩?DeepSeek 2023全年137次灰度数据揭示:3类配置漂移占比达68.3%
  • Unity动画师必看:用Parent Constraint替代父子关系,轻松实现多目标跟随(附C#动态绑定代码)
  • Unity URP程序化材质与立方体纹理实战指南
  • 用Python+skimage搞定图像纹理分析:从GLCM六种特征到实战代码避坑
  • 用XGBoost和SHAP搞定多分类预测:一份Python 3.7下的实战避坑指南
  • 星盘接口开发文档:星座语料接口指南
  • ARM内存映射与定时器架构解析
  • 经颅超声刺激(TUS)技术原理与PlanTUS系统应用指南
  • 用Python手搓SMO算法:从SVM理论到sklearn源码级复现(附避坑指南)
  • STM32单片机学习(28) —— STM32的SPI外设
  • DeepSeek代码质量评估实战手册:7步完成从混沌到可度量的质变跃迁
  • STM32单片机学习(27) —— SPI相关概念
  • 从安防监控到在线视频:聊聊Chrome对H265‘又爱又恨’的硬解策略与我们的日常影响
  • sudo高频指令【20260525】001篇
  • Envoy KillRequest 过滤器功能实现分析
  • 别再问OpenCV能干啥了!用Python+OpenCV 4.x,5分钟搞定你的第一个图像处理小程序