【学习总结|DAY034】Maven高级

在 Web 后端开发中,Maven 作为强大的项目管理工具,其高级特性对于优化项目结构、提高开发效率至关重要。本文将结合实际代码示例,深入介绍 Maven 的分模块设计与开发、继承与聚合以及私服相关知识。

一、分模块设计与开发

(一)为什么要分模块设计

将项目按功能拆分为多个子模块,能极大提升项目的可维护性、扩展性,方便模块间调用与资源共享。以电商项目为例,若将商品、搜索、购物车、订单等功能混在一个模块,代码会变得臃肿,维护困难,复用性也差。

(二)分模块设计策略

  1. 按功能模块拆分:划分出公共组件、商品模块、搜索模块等。如在电商项目中,mall-common作为公共组件模块,mall-goods负责商品相关功能。
  2. 按层拆分:分为公共组件、实体类、控制层、业务层、数据访问层等,像mall-controller为控制层模块,mall-mapper用于数据访问。
  3. 按功能模块 + 层拆分:结合上述两种方式,如mall-goods-controller负责商品模块的控制层逻辑。

(三)分模块开发实战

tlias项目为例,创建maven模块:

  1. 创建tlias-pojo模块:用于存放实体类。在src/main/java目录下创建实体类,如User.java
public class User {private Long id;private String username;private String password;// 省略getter和setter方法
}

  1. 创建tlias-utils模块:存放工具类。例如创建一个日期工具类DateUtil.java
import java.text.SimpleDateFormat;
import java.util.Date;public class DateUtil {public static String formatDate(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}
}

开发时需先进行模块功能设计,再编码,避免先开发完整工程再拆分。

二、继承与聚合

(一)继承

  1. 概念与作用:Maven 中的继承类似 Java 继承,子工程可继承父工程配置,主要用于简化依赖配置和统一管理依赖。
  2. 实现步骤
    • 创建父工程tlias-parent:设置打包方式为pom,并继承spring-boot-starter-parentpom.xml配置如下:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.3</version><relativePath/>
</parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

  • 配置子工程继承关系:在子工程(如tlias-pojo)的pom.xml中添加:
<parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-pojo</artifactId>
<version>1.0-SNAPSHOT</version>

  • 在父工程配置共有依赖:比如添加lombok依赖:
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency>
</dependencies>

子工程会自动继承该依赖。若父子工程依赖版本冲突,以子工程为准。

(二)版本锁定

在父工程的pom.xml中使用<dependencyManagement>统一管理依赖版本。例如管理JWT令牌版本:

<dependencyManagement><dependencies><!--JWT令牌--><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>

还可通过自定义属性进一步管理版本,如:

<properties><lombok.version>1.18.30</lombok.version><jjwt.version>0.9.1</jjwt.version>
</properties>
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency>
</dependencies>
<dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version></dependency></dependencies>
</dependencyManagement>

(三)聚合

  1. 概念与作用:聚合是将多个模块组织成整体,同时构建项目。聚合工程是无业务功能的 “空” 工程,仅含pom文件,可快速构建项目。
  2. 实现方式:在父工程(聚合工程)的pom.xml中使用<modules>配置子模块:
<modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module>
</modules>

构建时,模块会按依赖关系自动排序,与配置顺序无关。

三、私服

(一)私服介绍

私服是架设在局域网内的仓库服务,代理中央仓库,解决团队内部资源共享与同步问题。依赖查找顺序为:本地仓库 -> 私服 -> 中央仓库。在企业开发中,通常一个项目或公司只需一台私服。

(二)资源上传与下载

  1. 设置访问用户名 / 密码:在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>

  1. 配置上传地址:在 IDEA 的maven工程pom.xml中添加:
<distributionManagement><repository><id>maven-releases</id><url>http://192.168.150.101:8081/repository/maven-releases/</url></repository><snapshotRepository><id>maven-snapshots</id><url>http://192.168.150.101:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>

  1. 设置依赖下载仓库组地址:在settings.xml<mirrors><profiles>中配置:
<mirror><id>maven-public</id><mirrorOf>*</mirrorOf><url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>
<profile><id>allow-snapshots</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>maven-public</id><url>http://192.168.150.101:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</profile>

项目版本分为RELEASE(发行版本,存于RELEASE仓库)和SNAPSHOT(快照版本,存于SNAPSHOT仓库),可通过installdeploy命令进行资源上传。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qml OpacityMask详解

1、概述 OpacityMask是QML&#xff08;Qt Meta-Object Language&#xff09;中的一种图形效果&#xff0c;它使用另一个项目&#xff08;通常是一个图像或图形项&#xff09;作为遮罩来控制源项目的透明度。这种效果允许开发者通过遮罩的alpha通道来精确地控制源项目中哪些部分…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&am…

渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段

目录 SSRF说明: SSRF攻击流程 原理&#xff1a; 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…

centos9编译安装opensips 二【进阶篇-定制目录+模块】推荐

环境&#xff1a;centos9 last opensips -V version: opensips 3.6.0-dev (x86_64/linux) flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, HP_MALLOC, DBG_MALLOC, CC_O0, FAST_LOCK-ADAPTIVE_WAIT ADAPTIVE_WAIT_LOOPS1024, MAX_RE…

【前端】CSS学习笔记(1)

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…

电阻电位器可调电阻信号隔离变送器典型应用

电阻电位器可调电阻信号隔离变送器典型应用 产品描述&#xff1a; 深圳鑫永硕科技的XYS-5587系列是一进一出线性电子尺(电阻/电位计信号及位移)信号隔离变送器&#xff0c;是将输入电阻,线性电子尺,角度位移传感器信号进行采集,隔离,放大并转换成模拟量信号的小型仪表设备,并以…

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…

文件系统格式RAW数据恢复全攻略

一、RAW文件系统格式深度解析 在数据存储的世界里&#xff0c;文件系统扮演着至关重要的角色&#xff0c;它负责管理和组织硬盘、U盘、SD卡等存储设备上的数据。而RAW文件系统格式&#xff0c;作为一种特殊状态&#xff0c;常常让许多用户感到困惑与不安。RAW格式并非一种标准…

探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验

目录 简介&#x1f31f; 主要特点&#x1f4e5; 安装步骤1. 下载2. 配置环境和安装依赖3. 模型目录说明 &#x1f680; 运行 Stable-Diffusion-Webui-Forge1. 进入项目目录2. 运行项目3. 打开页面 &#x1f3a8; 使用体验常见问题&#x1f4dd; 小结 简介 Stable-Diffusion-We…

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…

Yearning开源MySQL SQL审核平台

一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用. 本地部署&#xff0c;注重隐私&#xff0c;简单高效的MYSQL审计平台。 它可以通过流程审批&#xff0c;实现真实线上环境sql的审核和执行&#xff0c;还可以回滚执行&#xff0c;能够确保线上SQL更新的可靠性…

PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍 torchinfo是一个为PyTorch用户量身定做的开源工具&#xff0c;其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程&#xff0c;让模型架构一目了然。通过torchinfo的summary函数&#xff0c;用户可以快速获取模型的详细结构和统计信息&#xff0…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…

C++ 类- 构造和析构

空类 class A {};空类大小&#xff1a; sizeof(A) 1编译器会默认生成 6 个成员函数&#xff1a; class A { public:A();//构造函数 - 完成对象初始化工作~A();//析构函数 - 完成对象的资源清理A(const A& a);//拷贝构造函数 - 使用同一类中之前创建的对象来初始化新创建…

集群、分布式及微服务间的区别与联系

目录 单体架构介绍集群和分布式架构集群和分布式集群和分布式区别和联系 微服务架构的引入微服务带来的挑战 总结 单体架构介绍 早期很多创业公司或者传统企业会把业务的所有功能实现都打包在一个项目中&#xff0c;这种方式就称为单体架构 以我们都很熟悉的电商系统为例&…

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器&#xff0c;以及多次连接后黑屏的问题。 安装 rdp 服务&#xff1a; yum install -y epel-release yum install -y xrdp或者如下&#xff1a; 可以通过下载rpm软件包&#xff0c;然后rpm方式安装。访问xrdp官网https…

Maven多环境打包方法配置

简单记录一下SpringBoot多环境打包配置方法&#xff0c;分部署环境和是否包含lib依赖包两个维度 目录 一、需求说明二、目录结构三、配置方案四、验证示例 一、需求说明 基于Spring Boot框架的项目分开发&#xff0c;测试&#xff0c;生产等编译部署环境&#xff08;每一个环境…

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…