news 2025/12/23 10:43:29

14. 分模块设计与开发 + 继承与聚合 + 私服

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
14. 分模块设计与开发 + 继承与聚合 + 私服

Maven高级笔记

一、分模块设计与开发

(一)核心概念

分模块设计是在项目设计阶段将一个大型Java项目按功能或结构拆分为多个独立模块,每个模块专注于特定功能或职责,通过依赖管理实现模块间的协作。

(二)未分模块的问题

  1. 项目维护困难:多人协作单一项目,冲突频发,业务扩张后代码臃肿。
  2. 组件复用性差:通用工具类、实体类等无法单独提取供其他项目使用。

(三)分模块设计优势

  1. 便于管理维护:按模块分工开发,责任明确,降低维护成本。
  2. 提升复用性:通用组件单独抽离,其他模块或项目可直接依赖。
  3. 支持拓展:模块独立升级、替换,不影响整体项目。

(四)拆分策略

策略类型说明示例
功能模块拆分按业务功能拆分公共组件、商品模块、搜索模块、购物车模块、订单模块
按层拆分按技术架构分层公共组件、实体类、控制层、业务层、数据访问层
功能+层拆分结合两种策略的混合模式商品模块(含自身控制层、业务层、数据访问层)+ 公共组件层

(五)实践步骤(以tlias项目为例)

  1. 模块拆分方案
    • tlias-pojo:抽取所有实体类(如Dept、Emp、PageBean等)。
    • tlias-utils:抽取通用工具类(如JwtUtils、AliyunOSSOperator等)。
    • tlias-web-management:保留业务功能(部门管理、员工管理等),依赖上述两个模块。
  2. 具体实现
    • 新建Maven模块,分别命名为tlias-pojo、tlias-utils。
    • 复制对应代码到新模块,保持包路径一致(如com.itheima.pojo)。
    • 在新模块pom.xml中引入必要依赖(如lombok、spring-boot-starter)。
    • 在tlias-web-management中删除原pojo和utils包,引入两个新模块的依赖坐标。

(六)注意事项

  • 分模块需先设计后开发,避免先开发再拆分。
  • 模块间依赖通过Maven坐标引入,避免硬编码依赖。

二、继承与聚合

(一)继承

1. 核心作用
  • 简化依赖配置:子工程继承父工程的依赖,无需重复配置。
  • 统一依赖管理:父工程集中控制依赖版本,确保所有子工程版本一致。
2. 实现方式
  • 父工程配置:
    • 打包方式设为pom(<packaging>pom</packaging>)。
    • 父工程可继承第三方父工程(如spring-boot-starter-parent),支持多重继承。
    • <<dependencies>中配置子工程通用依赖(如lombok、spring-boot-starter)。
  • 子工程配置:通过<parent>标签指定父工程坐标及相对路径。
3. 版本锁定
  • 场景:部分依赖仅部分子工程使用,但需统一版本。
  • 实现:父工程中通过<dependencyManagement>标签管理版本,子工程引入依赖时无需指定版本。
  • 示例:
    <!-- 父工程:统一管理JWT版本 --><dependencyManagement><<dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency></</dependencies></dependencyManagement><!-- 子工程:直接引入,无需版本 --><<dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency></</dependencies>
4. 属性配置(优化版本管理)
  • 父工程中通过<properties>定义版本属性,统一维护。
  • 示例:
    <properties><lombok.version>1.18.34</lombok.version><jwt.version>0.9.1</jwt.version></properties><<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></</dependencies>
5. 关键区别
标签作用特点
<<dependencies>直接依赖子工程自动继承,无需再次引入
<dependencyManagement>版本管理仅锁定版本,子工程需手动引入依赖

(二)聚合

1. 核心作用
  • 一键构建:聚合工程可统一执行编译、打包、安装等生命周期操作,自动按依赖顺序构建子模块。
2. 实现方式
  • 在聚合工程(通常与父工程共用)的pom.xml中通过<modules>标签指定子模块路径。
  • 示例:
    <modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module></modules>

(三)继承与聚合对比

维度继承聚合
核心作用简化依赖配置、统一版本一键构建项目
配置位置子工程配置父工程聚合工程配置子模块
打包方式均为pom均为pom
模块性质设计型模块,无业务代码设计型模块,无业务代码

三、私服

(一)核心概念

  • 私服:架设在局域网内的Maven仓库,用于团队内部资源共享,代理中央仓库。
  • 仓库类型:
    • RELEASE:存储稳定发布版本的资源。
    • SNAPSHOT:存储开发中的快照版本资源。
    • Central:代理中央仓库,缓存第三方依赖。

(二)依赖查找顺序

本地仓库 → 私服仓库 → 中央仓库

(三)资源上传与下载配置

1. 前提条件
  • 已搭建私服(如Nexus),访问地址:http://localhost:8081。
  • 私服默认账号:admin/admin。
2. 配置步骤
  1. 配置私服访问权限(maven/conf/settings.xml):
    <servers><server><id>maven-releases</id><username>admin</username><password>admin</password></server><server><id>maven-snapshots</id><username>admin</username><password>admin</password></server></servers>
  2. 配置私服镜像(加速依赖下载):
    <mirrors><mirror><id>maven-public</id><mirrorOf>*</mirrorOf><url>http://localhost:8081/repository/maven-public/</url></mirror></mirrors>
  3. 启用快照版本支持:
    <profiles><profile><id>allow-snapshots</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>maven-public</id><url>http://localhost:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile></profiles>
  4. 项目中配置上传地址(父工程pom.xml):
    <distributionManagement><repository><id>maven-releases</id><url>http://localhost:8081/repository/maven-releases/</url></repository><snapshotRepository><id>maven-snapshots</id><url>http://localhost:8081/repository/maven-snapshots/</url></snapshotRepository></distributionManagement>
3. 资源上传指令

在父工程执行mvn deploy,自动将所有子模块上传到对应私服仓库(SNAPSHOT/RELEASE)。

(四)应用场景

  • 团队内部模块共享(如A团队开发的tlias-utils供B团队使用)。
  • 统一管理内部开发的公共组件,避免重复开发。

四、核心面试题

  1. 分模块设计的优势?
    • 便于项目管理维护、提升组件复用性、支持横向拓展、模块间解耦。
  2. <dependencyManagement><<dependencies>的区别?
    • <<dependencies>:子工程自动继承依赖,直接生效。
    • <dependencyManagement>:仅统一版本,子工程需手动引入依赖。
  3. 私服的作用?
    • 团队内部资源共享、代理中央仓库加速下载、统一管理内部组件版本。
  4. Maven依赖查找顺序?
    • 本地仓库 → 私服仓库 → 中央仓库。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/11 19:27:02

霍尔电流传感器在直流屏系统中的应用与选型考量

在变电站、通信机房、轨道交通及工业自动化系统中&#xff0c;直流屏&#xff08;又称直流电源系统&#xff09;作为关键后备电源&#xff0c;承担着为控制、保护、信号、合闸等负载提供稳定直流电的重要任务。其可靠性直接关系到整个电力系统的安全运行。而在直流屏的监控与保…

作者头像 李华
网站建设 2025/12/20 3:17:54

新公链共识算法革命:带你探索区块链性能突破之路

引言&#xff1a;当TPS成为战场 在以太坊「世界计算机」的愿景遭遇性能瓶颈后&#xff0c;新公链们正在上演一场静默的技术革命。比特鹰观察到&#xff0c;2024年区块链世界的军备竞赛已聚焦于共识算法层面——这些支撑着区块链心脏跳动的底层机制&#xff0c;正在经历从"…

作者头像 李华
网站建设 2025/12/19 7:06:29

Bodymovin插件实战指南:5个关键步骤让AE动画在网页中完美呈现

Bodymovin插件实战指南&#xff1a;5个关键步骤让AE动画在网页中完美呈现 【免费下载链接】bodymovin-extension Bodymovin UI extension panel 项目地址: https://gitcode.com/gh_mirrors/bod/bodymovin-extension 想要将After Effects中精心设计的动画无缝迁移到网页中…

作者头像 李华
网站建设 2025/12/11 19:24:48

Windows微信群发工具终极指南:告别手动发送时代

Windows微信群发工具终极指南&#xff1a;告别手动发送时代 【免费下载链接】WeChat-mass-msg 微信自动发送信息&#xff0c;微信群发消息&#xff0c;Windows系统微信客户端&#xff08;PC端 项目地址: https://gitcode.com/gh_mirrors/we/WeChat-mass-msg 还在为微信消…

作者头像 李华
网站建设 2025/12/11 19:23:22

火蓝TS6036-2CNH:海光赋能的高密度信创存储标杆

在信创产业向纵深发展的进程中&#xff0c;关键行业内网对存储设备的“密度、性能、安全”提出了三重高阶需求。火蓝36盘位国产海光5380网络存储器&#xff08;TS6036-2CNH&#xff09;精准破局&#xff0c;以双路海光5380处理器为算力核心&#xff0c;融合36盘位高密度设计与全…

作者头像 李华
网站建设 2025/12/11 19:23:04

谷歌核心更新将至!资深SEO提醒:独立站近期务必紧盯数据波动

作为从业十几年的老SEO&#xff0c;今天必须给各位做独立站的朋友提个醒——谷歌下一波核心更新已经箭在弦上了&#xff01;相信关注行业动态的朋友都知道&#xff0c;今天谷歌搜索中心在苏黎世的直播活动上&#xff0c;约翰穆勒亲自透露&#xff0c;团队还在推进下一个核心更新…

作者头像 李华