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

【JavaWeb后端学习笔记】Maven项目管理

Maven

  • 1、分模块设计
  • 2、Maven继承
    • 2.1 继承关系
    • 2.2 版本锁定
  • 3、Maven聚合
  • 4、聚合与继承的关系

1、分模块设计

如果一个项目中含有大量的功能模块。可以考虑将这些功能分模块设计,逐一进行开发。例如将公共类可以定义在一个项目中,将通用工具类也放在一个项目中,其他业务模块需要使用这些类或者工具,只需要在pom文件中引入它们的依赖坐标。

<dependencies><dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version></dependency>...<dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version></dependency>
</dependencies>

2、Maven继承

2.1 继承关系

在一个大型项目中,子模块非常多,如果这些子模块都需要一个共同的依赖,那么可以给这些子模块的父工程的pom文件中加入这项依赖,子模块中就不需要再加这个依赖了。这是因为子模块继承了父工程的pom文件中的依赖。

Maven继承的作用就是简化依赖配置,统一管理依赖;

指定继承关系,需要在子工程的pom文件中加入

<parent><!-- 父工程坐标 2.3.3--><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version><relativePath>父工程pom文件相对路径</relativePath>
</parent>

父工程需要指定打包方式为pom。在父工程pom文件中加:

<packaging>pom</packaging>

注意,如果父工程与子工程都引入了同一个依赖的不同版本,以子工程的为准。

2.2 版本锁定

在Maven中,可以在父工程的pom文件中通过dependencyManagement标签来统一管理依赖版本。

例如在一个大型项目中,有部分子模块引入了同一个依赖,当要改变依赖版本时,则需要在所有子模块中查找是否引入了这个依赖,这个过程相当繁琐。这时就可以通过Maven的版本锁定来解决这个问题。

子模块引入依赖时不指定版本,只需指定groupId和artifactId。把版本交给父工程管理。
在父工程中使用dependencyManagement标签管理版本:

<dependencyManagement><dependencies><dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>指定版本</version> </dependency>...</dependencies>
</dependencyManagement>

dependencyManagement标签只会管理依赖版本,不会直接把依赖加入进来。

自定义属性与属性引用
自定义属性与属性引用方便集中统一管理依赖版本。
通过properties标签自定义属性:

<!-- 自定义属性 -->
<properties><jjwt.version>0.9.1</jjwt.version><lombok.version>1.18.24</lombok.version>
</properties>

通过${…}引用属性:

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jwtt.version}</version> 
</dependency>

3、Maven聚合

在分模块开发时,如果需要打包一个项目,那么这个项目依赖的其他子项目需要先安装在Maven本地,父工程也需要安装在本地,再对此项目进行打包操作。这个操作比较复杂。所以Maven聚合实现一键构建,一键打包,一键运行。

聚合,也就是将多个模块组织成一个整体,同时进行项目构建。

聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件)。一般父工程会同时起到聚合工程的作用。
聚合工程的作用就是快速构建项目,无需根据依赖关系手动构建,直接在聚合工程上构建即可。

Maven中通过modules标签设置当前聚合工程所包含的子模块名称。

<!--- 聚合 --->
<modules><module> 子模块相对路径 </module><module>../prj_utils</module><module>../prj_common</module>...
</modules>

4、聚合与继承的关系

  1. 作用:
    • 聚合用于快速构建项目
    • 继承用于简化依赖配置,统一管理依赖
  2. 相同点 :
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
    • 聚合与继承均属于设计型模块,并无实际的模块内容
  3. 不同点:
    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

相关文章:

【JavaWeb后端学习笔记】Maven项目管理

Maven 1、分模块设计2、Maven继承2.1 继承关系2.2 版本锁定 3、Maven聚合4、聚合与继承的关系 1、分模块设计 如果一个项目中含有大量的功能模块。可以考虑将这些功能分模块设计&#xff0c;逐一进行开发。例如将公共类可以定义在一个项目中&#xff0c;将通用工具类也放在一个…...

Docker--Docker Container(容器) 之 操作实例

容器的基本操作 容器的操作步骤其实很简单&#xff0c;根据拉取的镜像&#xff0c;进行启动&#xff0c;后可以查看容器&#xff0c;不用时停止容器&#xff0c;删除容器。 下面简单演示操作步骤 1.创建并运行容器 例如&#xff0c;创建一个名为"my-nginx"的交互…...

Android前端签到web迁移到rust的axum的过程-签到的重构

本次变更了以下内容: 为了使用之前ip2sta的ip到端点名的python,dic变量,将其存入redis hashset.使用地址/api/ip2dic 手动执行之.并且定义在/station/init,这个每天初始化redis的路径下.在rust axum的route中定义/sta/ip2dic,用来得到redis字典的内容,包含值和键.在前端的人名…...

用户认证系统登录界面

下面是使用HTML和JavaScript实现的一个中文版登录界面&#xff0c;包含登录、注册和修改密码功能。注册成功后会显示提示信息&#xff0c;在登录成功后进入一个大大的欢迎页面。 1.代码展示 <!DOCTYPE html> <html lang"zh-CN"> <head><meta …...

Redis从入门到进阶(总结)

以下内容均以CentOS7为背景。 一、Redis安装及启动 mysql&#xff08;读&#xff1a;2000/s&#xff1b;写&#xff1a;600/s&#xff09; redis&#xff08;读&#xff1a;10w/s&#xff1b;写&#xff1a;8w/s&#xff09;通过官方给出的数据单机并发可以达到10w/s&#xf…...

【D3.js in Action 3 精译_044】5.1 饼图和环形图的创建(四):数据标签的添加

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09; ✔️5.1.4 数据标签的添加&#xff08;四&…...

Linux的基本功能和命令

Linux的基本功能和命令 切换目录 pwd 查询当前目录地址 cd /xxx/xxx 转到目录 cd …/ 回到上一级目录 cd ./ 当前目录 创建、删除文件/文件夹 创建文件\文件夹 touch filename 创建空文件mkdir 创建目录 mkdir -p 目标目录存在也不报错mkdir -p xxx/xxx 递归创建目录…...

【Spark】Spark的两种核心Shuffle工作原理详解

Spark 的shuffle机制 一、Spark ShuffleManager 发展历程 Spark 1.1.0 之前 在 Spark 1.1.0 之前&#xff0c;Spark 使用 BlockStoreShuffleFetcher 来处理 Shuffle 操作。这个实现主要依赖于直接从 BlockManager 获取 Shuffle 数据&#xff0c;并通过网络进行交换。 Spark …...

TCP 的文化内涵

从历史和文化内涵的视角看 TCP 协议的优势和局限&#xff0c;这些都刻在基因里。节约和经济获得向下兼容&#xff0c;但这也意味着它没有浪费带宽的本意&#xff0c;任何相左的优化策略终将遇到无法解决的困难&#xff0c;大致就这样&#xff0c;这为设计新协议提了意见&#x…...

ASP.NET |日常开发中读写XML详解

ASP.NET &#xff5c;日常开发中读写XML详解 前言一、XML 概述1.1 定义和结构1.2 应用场景 二、读取 XML 文件2.1 使用XmlDocument类&#xff08;DOM 方式&#xff09;2.2 使用XmlReader类&#xff08;流方式&#xff09; 三、写入 XML 文件3.1 使用XmlDocument类3.2 使用XmlWr…...

Less和SCSS,哪个更好用?

前言 Less 和 SCSS 都是流行的 CSS 预处理器&#xff0c;它们的目的都是扩展 CSS 的功能&#xff0c;使样式表更具组织性、可维护性和可重用性。虽然它们有许多相似之处&#xff0c;但在语法、特性和工作方式上也存在一些差异。 Less Less 是一种动态样式表语言&#xff0c;…...

第一个C++程序--(蓝桥杯备考版)

第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出&#xff1a;在屏幕打印"hello world!" return 0;}main函数 main 函数是…...

NanoLog起步笔记-7-log解压过程初探

nonolog起步笔记-6-log解压过程初探 再看解压过程建立调试工程修改makefile添加新的launch项 注&#xff1a;重新学习nanolog的README.mdPost-Execution Log Decompressor 下面我们尝试了解&#xff0c;解压的过程&#xff0c;是如何得到文件头部的meta信息的。 再看解压过程 …...

【MySQL 进阶之路】基础语法及优化技巧

MySQL DML 基础语法及优化技巧 一、DML&#xff08;数据操作语言&#xff09;概述 DML 是数据库操作语言的子集&#xff0c;用于数据的增、删、改、查四个基本操作。MySQL 中的 DML 操作通常是指以下四种基本操作&#xff1a; INSERT&#xff1a;插入数据SELECT&#xff1a;…...

微信小程序做电子签名功能

文章目录 最近需求要做就记录一下。 人狠话不多&#xff0c;直接上功能&#xff1a; 直接搂代码吧,复制过去就可以用&#xff0c;有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --> <custom-navbar title"电子签名"show-home"{{fals…...

PR的选择与移动

选择工具 可以选择序列上的剪辑&#xff0c;如果需要多选可以按住shift键选中多个剪辑 CtrlA&#xff1a;可以进行全选 编组 选中多个剪辑后“右键-编组“可以将所选的剪辑连接在一起。这时单击任意剪辑都可以选中全部 向前选择轨道工具与向后选择轨道工具 向前选择轨道工具…...

Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿

目录 1. 进程状态的概念 1.1 课本上的说法&#xff1a;名词提炼 1.2 运行&#xff0c;阻塞和挂起 1.2.1 什么叫做运行状态&#xff08;running&#xff09;&#xff1f; 1.2.2 什么叫做阻塞状态&#xff08;sleeping&#xff09;&#xff1f; 1.2.3 什么叫做挂起状态&…...

linux/centOS7用户和权限管理笔记

linux系列中可以&#xff1a; 配置多个用户配置多个用户组用户可以加入多个用户中 linux中关于权限的管理级别有2个级别&#xff0c;分别是&#xff1a; 针对用户的权限控制针对用户组的权限控制 一&#xff0c;root用户 root用户拥有最大的系统操作权限&#xff0c;而普通…...

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本&#xff1a;MySQL 服务器系统和 MySQL 嵌入…...

Scala函数的泛型

package hfd //泛型 //需求&#xff1a;你是一个程序员&#xff0c;老板让你写一个函数&#xff0c;用来获取列表中的中间元素 //List(1,2,3,4,5)>中间元素的下标长度/2 >3 //getMiddleEle object Test38_5 {def print1():Unit{println(1)}def print2(): Unit {println(…...

云轴科技ZStack亮相中国生成式AI大会上海站 展现AI Infra新势力

近日&#xff0c;以“智能跃进&#xff0c;创造无限”为主题的2024中国生成式AI大会在上海举办。本次大会由上海市人工智能行业协会指导&#xff0c;智东西、智猩猩共同发起&#xff0c;邀请了人工智能行业的顶尖嘉宾汇聚一堂&#xff0c;以前瞻性视角解构和把脉生成式AI的技术…...

态感知与势感知

“态感知”和“势感知”是两个人机交互中较为深奥的概念&#xff0c;它们虽然都与感知、认知相关&#xff0c;但侧重点不同。下面将从这两个概念的定义、区分以及应用领域进行解释&#xff1a; 1. 态感知 态感知通常指的是对事物当前状态、属性或者内在特征的感知。它强调的是在…...

汽车零部件设计之——发动机曲轴预应力模态分析仿真APP

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天&#xff0c;汽车零部件需…...

谷歌浏览器的网页数据导出与导入方法

谷歌浏览器是全球最受欢迎的网络浏览器之一&#xff0c;它不仅提供了快速、安全的浏览体验&#xff0c;还拥有丰富的功能和扩展程序。本文将详细介绍如何在Chrome浏览器中导出和导入网页数据&#xff0c;同时涵盖一些相关的实用技巧&#xff0c;如调试JavaScript、自动填充表单…...

pytroch环境安装-pycharm

环境介绍 安装pycharm 官网下载即可&#xff0c;我这里已经安装&#xff0c;就不演示了 安装anaconda 【官网链接】点击下载 注意这一步选择just me 这一步全部勾上 打开 anaconda Prompt 输入conda create -n pytorch python3.8 命令解释&#xff1a;创建一个叫pytorch&…...

【大模型】PostgreSQL是向量数据库吗

PostgreSQL&#xff08;通常简称为 Postgre&#xff09;本身并不是一个专门的向量数据库&#xff0c;但它可以通过扩展或插件支持向量数据的存储、检索和处理&#xff0c;因此可以在某些场景下作为向量数据库使用。以下是关于 PostgreSQL 是否可以作为向量数据库的详细说明&…...

【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码

目录 一、PyQt5介绍&#xff1a; &#xff08;1&#xff09;PyQt简介&#xff1a; &#xff08;2&#xff09;PyQt API&#xff1a; &#xff08;3&#xff09;支持的环境&#xff1a; &#xff08;4&#xff09;安装&#xff1a; &#xff08;5&#xff09;配置环境变量…...

Qt 联合Halcon配置

文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…...

Vue导出报表功能【动态表头+动态列】

安装依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader创建export-excel.vue组件 代码内容如下&#xff08;以element-ui样式代码示例&#xff09;&#xff1a; <template><el-button type"primary" click"Expor…...

C#调用python 程序

需要通过nuget安装ironphthon using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Win…...

网站闭站保护/seo关键词排名网络公司

1. 马哈鱼数据血缘分析工具简介 马哈鱼数据血缘分析工具&#xff08;英文名称为 Gudu SQLFlow &#xff09;是一款用于分析 SQL 语句&#xff0c;并发现其中数据血缘关系的分析软件&#xff0c;经常和元数据管理工具一起使用&#xff0c;是企业数据治理的基础工具。 如果你对 …...

安徽网站建设推荐/重庆seo网站建设

1、为什么要自动打包工具&#xff1f; 每修改一个问题&#xff0c;测试都让你打包一个上传fir &#xff0c; 你要clean -> 编译打包 -> 上传fir -> 通知测试。而且打包速度好慢&#xff0c;太浪费时间了。如果有一个工具能自动的帮你做完上面所有的事情&#xff0c;岂…...

导航栏宽度wordpress/做网站要多少钱

来源&#xff1a;Modis数据简介 - zerobyzero - 博客园 (cnblogs.com) 【ENVI精讲】处理专题十二&#xff1a;基于MODIS数据的气溶胶遥感监测 - 知乎 (zhihu.com) MODIS 二级气溶胶产品指北&#xff08;with Python&#xff09; - 炸鸡人博客 (zhajiman.github.io) 美国于19…...

每个网站都有服务器吗/一手app推广接单平台

定义&#xff1a; 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系&#xff0c;将这个对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 解决的问题 请求和处理分开、实现解耦、提高系统的灵活…...

网站源码完整/百度前三推广

目录 简介 安装 单独使用 const store createStore(reducer) store.subscribe(fun) store.getState() store.dispatch(obj) 示例 结合react使用 Provider const mapStateToProps state>(obj) const mapDispatchToProps obj connection 示例 index.js sto…...

哪个网站专业做安防/百度极速版推广

爬虫项目介绍 有一定的复杂性可以灵活调整项目的复杂性平衡语言/爬虫之间的比重通用爬虫,如baidu,google聚焦爬虫&#xff0c;从互联网获取结构化数据 把网页转换成数据 go语言的爬虫库/框架 henrylee2cn/pholcusgocrawlcollyhu17889/go_spider 不使用现成爬虫库/框架来写一个…...