Maven进阶知识

一、Maven 坐标

(一)概念

在 Maven 中坐标是构件的唯一标识,其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定义项,packaging 默认为 jar。

(二)意义

为 Maven 世界中海量构件提供统一规范的唯一标识,便于机器自动查找。

(三)含义详解

  1. groupId :组织标识,通常是公司网址反写加项目名(如 com.example.project)。

  2. artifactId :项目名,一般格式为项目名 - 模块名(如 myproject - core)。

  3. version :版本号,形式如 0.0.1 - SNAPSHOT。第一位大版本号,第二位分支版本号,第三位小版本号。后缀有特定含义,如 SNAPSHOT(快照版本)、ALPHA(内测)、BETA(公测)、RELEASE(稳定)、GA(正式发布)。

  4. packaging :打包方式,常见有 pom、jar、war 等。

  5. classifier :辅助定义构件输出的附属构件。

  6. 如图

二、依赖

(一)意义

解决项目中对各类外部库的依赖管理难题,Maven 能自动下载并妥善放置依赖至本地仓库,通过在 POM 文件 dependencies 元素内声明依赖关系。

(二)使用示例

以引入 junit - 4.9.jar 包为例:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope>
</dependency>

属性说明:三维坐标用于定位依赖包;scope 控制依赖包在何种场景加入 classpath,可去 Maven 官网中央仓库查找依赖。

(三)依赖范围

Maven 项目开发涉及三套 classpath:

  1. 主代码 :main 下主代码编译依赖。

  2. 测试代码 :test 下测试代码编译依赖。

  3. 运行时 :main 代码运行时依赖。

依赖范围通过 scope 标签设置,共 6 种:

  1. compile :默认,对编译、测试、运行 classpath 都有效。

  2. test :仅对测试 classpath 有效,如 JUnit。

  3. provided :对编译与测试有效,运行时无效。例如 web 开发中 servlet - api,编译测试用到,运行时由容器提供,打 war 包时不放入 WEB - INF/lib。

  4. runtime :与 provided 相对,运行时有效。像 jdbc 编写是接口规范,运行需具体实现类 jar 包。

  5. 例如:

(四)依赖传递与可选依赖

  1. 依赖传递 :若 A 依赖 B,C 依赖 A,则 C 也会依赖 B。

  2. 依赖阻断 :B 中加入 <optional>true</optional> 标签,B 就不会被传递。

  3. 可选依赖 :要排除依赖中某项,用 exclusion 属性。例如在 C 中排除 A 中的 B 依赖,示例代码如下:

<dependency><groupId>a - group</groupId><artifactId>a - artifact</artifactId><version>a - version</version><exclusions><exclusion><groupId>b - group</groupId><artifactId>b - artifact</artifactId></exclusion></exclusions>
</dependency>

三、仓库

(一)概述

Maven 仓库是存放项目依赖的第三方库等构件的地方,帮助管理构件。

仓库类型有本地、中央、远程仓库。

(二)本地仓库

  1. 初次执行 Maven 命令时创建,默认在用户目录下(Linux 和 Windows 均如此),路径为%USER_HOME%/.m2/repository/。

  2. 运行 Maven 时,优先从本地仓库获取构件,若没有则从远程仓库下载至本地再使用。

  3. 可通过修改%Maven_HOME%/conf/settings.xml 文件中的配置更改默认位置。

(三)中央仓库

  1. 由 Maven 社区管理,包含大量常用开源 Java 构件及相关信息。

  2. 无需额外配置,但需网络访问。

(四)依赖搜索顺序

四、继承和聚合

(一)继承

  1. 意义 :避免重复配置,提升项目安全性与管理便捷性。多个子模块可继承父模块的公共配置,如公共依赖、插件配置、仓库地址等。

  2. 可继承 POM 元素groupId :项目组 ID,项目坐标的核心元素;version :项目版本,项目坐标的核心元素;description :项目的描述信息;organization :项目的组织信息;inceptionYear :项目的创始年份;url :项目的 url 地址;developers :项目的开发者信息;contributors :项目的贡献者信息;distributionManagement :项目的部署信息;issueManagement :缺陷跟踪系统信息;ciManagement :项目的持续集成信息;scm :项目的版本控制信息;mailingListserv :项目的邮件列表信息;properties :自定义的 Maven 属性;dependencies :项目的依赖配置;dependencyManagement :项目的依赖管理配置;repositories :项目的仓库配置;build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;reporting :包括项目的报告输出目录配置、报告插件配置等。

  3. IDEA 实现 Maven 继承 :以创建父子项目为例,创建父类项目,再创建子类项目 core、manage、portal 等,子模块继承父模块,观察父子项目的 pom 文件配置差异。

  4. 如图

        创建父类项目 

  

        创建子类项目core 

        以同样的方式创建manage和portal项目: 

        至此,一个由parent统一管理core,manage和portal的mavan项目就创建好了;

观察父子项目的pom文件配置

(二)聚合

暂未在原文中明确提及聚合相关内容,通常聚合用于构建多模块项目,将多个模块聚合在一起构建。

(三)properties 属性使用

通过 properties 元素定义 Maven 属性,在其他地方以 ${属性名称} 引用,消除重复,统一管理。如统一声明 Spring Framework 版本,避免多处重复声明。

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

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

相关文章

网络原理 ——TCP 协议

TCP 报文结构 TCP 头部 20字节&#xff08;无选项&#xff09;&#xff0c;关键字段&#xff1a; 字段长度&#xff08;bit&#xff09;说明源端口16发送方端口目的端口16接收方端口序列号&#xff08;seq&#xff09;32数据字节的编号确认号&#xff08;ack&#xff09;32期…

C#使用sftp远程拷贝文件

需要下载 的包&#xff1a;Core.Renci.SshNet 下载依赖包的时候需要注意版本&#xff0c;高版本的.net环境不支持会用不了&#xff0c;我用的.net5,所以下载的2021.10.2 功能的核心式创建一个SftpClient&#xff0c;并传入所需要的参数&#xff1a;远程IP地址&#xff0c;端口…

文本预处理(NLTK)

1. 自然语言处理基础概念 1.1 什么是自然语言处理 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于…

socket编程基础

上一篇 --- 网络基础概念&#xff08;下&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147320155?fromshareblogdetail&sharetypeblogdetail&sharerId147320155&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 理…

CSS 解决手机浏览器默认行为(点击出现蓝色背景)

最近写了一个 Web 应用&#xff0c;可以兼容手机端和PC端&#xff0c;在PC端调试的时候没有发现这个问题&#xff0c;但是在手机上或者PC浏览器改成手机模式进行调试的时候就会出现下面这个场景&#xff1a; 这是两个 div&#xff0c;点击的时候&#xff0c;会出现一个蓝色的背…

多模态大语言模型arxiv论文略读(三十八)

Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ➡️ 论文标题&#xff1a;Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ➡️ 论文作者&#xff1a;Naihao Deng, Zhenjie Sun, Ruiqi He, A…

聊聊Spring AI Alibaba的YuQueDocumentReader

序 本文主要研究一下Spring AI Alibaba的YuQueDocumentReader YuQueDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-yuque/src/main/java/com/alibaba/cloud/ai/reader/yuque/YuQueDocumentReader.java public class YuQueDocument…

OCR定制识别:解锁文字识别的无限可能

OCR 定制识别是什么&#xff1f; OCR&#xff0c;即光学字符识别&#xff08;Optical Character Recognition&#xff09; &#xff0c;它就像是一个神奇的 “文字翻译器”&#xff0c;能把图片里的文字转化成计算机可编辑的文本。比如&#xff0c;你扫描一份纸质文档成图片&am…

麒麟系统(基于Ubuntu)上使用Qt编译时遇到“type_traits文件未找到”的错误

在麒麟系统&#xff08;基于Ubuntu&#xff09;上使用Qt编译时遇到“type_traits文件未找到”的错误&#xff0c;通常是由于C标准库头文件缺失或项目配置问题导致的。以下是逐步解决方案&#xff1a; 1. 安装C标准库和开发工具 确保系统已安装完整的开发工具链和标准库&#…

服务器上安装node

1.安装 下载安装包 https://nodejs.org/en/download 解压安装包 将安装包上传到/opt/software目录下 cd /opt/software tar -xzvf node-v16.14.2-linux-x64.tar.gz 将解压的文件夹移动到安装目录(/opt/nodejs)下 mv /opt/software/node-v16.14.2-linux-x64 /opt/nodejs …

Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码

Vue3 Vite TS,使用 ExcelJS导出excel文档&#xff0c;生成水印&#xff0c;添加背景水印&#xff0c;dom转图片&#xff0c;插入图片&#xff0c;全部代码 ExcelJS生成文档并导出导出表头其他函数 生成水印设置文档的背景水印dom 转图片插入图片全部代码 ExcelJS 读取&#…

devops自动化容器化部署

devops 一、简单案例体验gitlabrunner部署静态文件二、devops企业级部署方案1、流程图2、依赖工具3、流程图4、主机规划5、安装工具软件1、安装git2、安装gitlab3、安装jenkins-server4、安装harbor5、安装web-server&#xff0c;也就是部署服务的机子&#xff0c;需要安装dock…

高级 SQL 技巧:提升数据处理能力的实用方法

在数据驱动的时代,SQL 作为操作和管理关系型数据库的标准语言,其重要性不言而喻。基础的 SQL 语句能满足日常的数据查询需求,但在处理复杂业务逻辑、进行数据分析和优化数据库性能时,就需要掌握一些高级 SQL 技巧。这些技巧不仅能提高查询效率,还能实现复杂的数据处理任务…

21.disql命令登录达梦数据库,查询并操作数据库

目录 1.连接达梦数据库 1.1 windows或linux系统 步骤&#xff08;1&#xff09;&#xff1a;打开终端窗口 步骤&#xff08;2&#xff09;&#xff1a;进入梦数据库安装目录下的 bin 文件夹 步骤&#xff08;3&#xff09;&#xff1a;用disql命令进行登录 1.2 docker部署…

N8N MACOS本地部署流程避坑指南

最近n8n很火&#xff0c;就想在本地部署一个&#xff0c;尝尝鲜&#xff0c;看说明n8n是开源软件&#xff0c;可以在本地部署&#xff0c;于是就尝试部署了下&#xff0c;大概用了1个多小时&#xff0c;把相关的过程记录一下&#xff1a; 1、基础软件包 abcXu-MacBook-m2-Air…

qt之开发大恒usb3.0相机一

1.在大恒相机给的sample里没有看见qt开发的demo. 第一步先运行c sdk中中的demo&#xff0c;看了下代码&#xff0c;大恒使用的UI框架是MFC.然后 vs2022编译。运行结果 第一步&#xff0c;先用qt进行坐下页面布局&#xff0c;如下图&#xff08;保存图片的地方做了些更改&#…

leetcode-枚举

枚举 3200. 三角形的最大高度 题目 给你两个整数 red 和 blue&#xff0c;分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形&#xff0c;满足第 1 行有 1 个球&#xff0c;第 2 行有 2 个球&#xff0c;第 3 行有 3 个球&#xff0c;依此类推。 每一行的球必…

DeepSeek智能时空数据分析(三):专业级地理数据可视化赏析-《杭州市国土空间总体规划(2021-2035年)》

序言&#xff1a;时空数据分析很有用&#xff0c;但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要&#xff0c;然而&#xff0c;三大挑战仍制约其发展&#xff1a;技术门槛高&#xff0c;需融合GIS理论、SQL开发与时空数据库等多领域知识&#xff1b;空…

如何用WordPress AI插件自动生成SEO文章,提升网站流量?

1. 为什么你需要一个WordPress AI文章生成插件&#xff1f; 每天手动写文章太耗时&#xff1f;SEO优化总是不达标&#xff1f;WordPress AI插件能帮你24小时自动生成原创内容&#xff0c;从关键词挖掘到智能排版&#xff0c;全程无需人工干预。 痛点&#xff1a;手动写作效率低…

鼠标指定范围内随机点击

鼠标指定范围内随机点击 点赞神器 将鼠标移动到相应位置后按F5 F6键&#xff0c;设置点击范围&#xff0c; F8开始&#xff0c;ESC中止。 有些直播有点赞限制&#xff0c;例如某音&#xff0c;每小时限制3千次&#xff0c;可以设置1200毫秒&#xff0c;3000次。 软件截图&#…