Maven篇

news/2024/11/15 9:40:22/文章来源:https://www.cnblogs.com/LunaNorth/p/18386094

1、什么是 maven ?

maven 主要服务于基于 java 平台的项目构建,依赖管理和项目信息管理。

maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。当使用 Maven 的时候,你用一个明确定义的项对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自于一组共享的(或自定义的)插件。

2、Maven 能为我们解决什么问题?

①添加第三方 jar 包

按照最原始的做法,我们是手动复制 jar 包到项目 WEB-INF / lib 下,每个项目都会有一份,造成大量重复文件。而 Maven 将 jar 包放在本地仓库中统一管理,需要jar包只需要用坐标的方式引用即可。

②jar 包之间的依赖关系

jar 包之间往往不是独立的,很多 jar 需要在其他jar包的支持下才能够正常工作,称为 jar 包之间的依赖关系。如果我们手动去导入,要知道 jar 包之间的依赖关系并一一导入是及其麻烦而且容易出错的。如果使用 Maven,它能够将当前 jar 包所依赖的其他所有 jar 包全部导入。

③获取第三方 jar 包开发过程中我们需要用到很多 jar 包,每个jar包在官网获取的方式不尽相同,给工作带来了额外困难。但是使用Maven 可以以坐标的方式依赖一个 jar 包,Maven 从中央仓库进行下载,并同时下载这个 jar 包依赖的其他 jar 包。

④将项目拆分为多个工程模块

项目的规模越来越大,已经不可能通过 package 结构来划分模块,必须将项目拆分为多个工程协同开发。

3、说说 maven 有什么优缺点?

优点

  • 简化了项目依赖管理
  • 易于上手,对于新手来说了解几个常用命令即可满足日常工作
  • 便于与持续集成工具(jenkins)整合
  • 便于项目升级,无论是项目本身还是项目使用的依赖
  • maven 有很多插件,便于功能扩展,比如生产站点,自动发布版本等

缺点

  • Maven 是一个庞大的构建系统,学习难度大。(很多都可以这样说,入门容易[优点]但是精通难[缺点])
  • Maven采用约定约定优于配置的策略,虽然上手容易但是一旦出现问题,难于调试中网络环境较差,很多 repository 无法访问

4、什么是 Maven 的坐标?

Maven 其中一个核心的作用就是管理项目的依赖,引入我们所需的各种 jar 包等。为了能自动化的解析任何一个 Java 构件,Maven 必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。

maven 的坐标通过 groupId,artifactId,version 唯一标志一个构件。groupId 通常为公司或组织名字,artifactId 通常为项目名称,versionId 为版本号。

5、讲一下 maven 的生命周期

Maven 的生命周期:从我们的项目构建,一直到项目发布的这个过程。

每个阶段的说明

阶段 处理 描述
validate 验证项目 验证项目是否正确且所有必须信息是可用的
compile 执行编译 源代码编译在此阶段完成
test 测试 使用适当的单元测试框架((例 JUnit)运行测试。
package 打包 创建 JAR / WAR 包如在 pom.xml 中定义提及的包
verify 检查 对集成测试的结果进行检查,以保证质量达标
install 安装 安装打包的项目到本地仓库,以供其他项目使用
deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

6、说说你熟悉哪些 maven 命令?

mvn archetype:generate 创建 Maven 项目

mvn compile 编译源代码

mvn deploy 发布项目

mvn test-compile 编译测试源代码

mvn test 运行应用程序中的单元测试

mvn site 生成项目相关信息的网站

mvn clean 清除项目目录中的生成结果

mvn package 根据项目生成的jar

mvn install 在本地 Repository 中安装 jar

mvn eclipse:eclipse 生成 eclipse 项目文件

mvnjetty:run 启动 jetty 服务

mvntomcat:run 启动 tomcat 服务

mvn clean package -Dmaven.test.skip=true: 清除以前的包后重新打包,跳过测试类

7、如何解决依赖传递引起的版本冲突?

可通过 dependency 的 exclusion 元素排除掉依赖。

8、说说 maven 的依赖原则

  • 最短路径原则(依赖传递的路径越短越优先)
  • pom 文件申明顺序优先(路径长度一样,则先申明的优先)
  • 覆写原则(当前pom文件里申明的直接覆盖父工程传过来的)
  • 父级依赖比子级高

9、说说依赖的解析机制?

当依赖的范围是 system 的时候,Maven 直接从本地文件系统中解析构件。

根据依赖坐标计算仓库路径,尝试直接从本地仓库寻找构件,如果发现对应的构件,就解析成功。

如果在本地仓库不存在相应的构件,就遍历所有的远程仓库,发现后,下载并解析使用。

如果依赖的版本是 RELEASE 或 LATEST,就基于更新策略读取所有远程仓库的元数据文件(groupId/artifactId/maven-metadata.xml),将其与本地仓库的对应元合并后,计算出 RELEASE 或者 LATEST 真实的值,然后基于该值检查本地仓库,或者从远程仓库下载。

如果依赖的版本是 SNAPSHOT,就基于更新策略读取所有远程仓库的元数据文件,将它与本地仓库

对应的元数据合并,得到最新快照版本的值,然后根据该值检查本地仓库,或从远程仓库下载。

如果最后解析得到的构件版本包含有时间戳,先将该文件下载下来,再将文件名中时间戳信息删除,剩下 SNAPSHOT 并使用(以非时间戳的形式使用)。

10、说说插件的解析机制

与依赖的构件一样,插件也是基于坐标保存在 Maven 仓库中。在用到插件的时候会先从本地仓库查找插件,如果本地仓库没有则从远程仓库查找插件并下载到本地仓库。与普通的依赖构件不同的是,Maven 会区别对待普通依赖的远程仓库与插件的远程仓库。前面提到的配置远程仓库只会对普通的依赖有效果。当 Maven 需要的插件在本地仓库不存在时是不会去我们以前配置的远程仓库查找插件的,而是需要有专门的插件远程仓库。

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

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

相关文章

【C#】【WinForm】启动报错 “lc.exe”已退出,代码为 -1

启动项目时报错 “lc.exe”已退出,代码为 -1,这个原因是项目需要认证的凭证,有两种方法解决. 1. 手动搜索license,然后删掉即可 2.工具->nuget包管理->管理解决方案的nuget包,搜emptylicenses,找到emptylicenseslicx下载安装就行。 有志者,事竟成,破釜沉舟,百二…

数业智能心大陆开学 “收心” 全指南

凉爽的秋风为我们带来了新学期的讯息。欢乐的暑假已临近尾声,孩子即将重返校园,踏上全新的征程。开学在即,众多同学和家长 “涌入” 数业智能心大陆的 AI 心理咨询平台,与 AI 心理咨询师展开深入细致的交流。心大陆留意到,近期同学们普遍出现情绪波动的状况,例如精神萎靡…

【MySQL】binlog常见问题

https://mp.weixin.qq.com/s/n9vWkee2N-gpXpOHIYtRJg 关于binlog,这里常见的问题如下:binlog是什么 binlog的配置和查看 binlog的类型 binlog如何数据恢复 binlog是逻辑日志还是物理日志 binlog的作用binlog是什么 binlo(binary log),是MySql的二进制日志文件,这个文件记…

【私有云场景案例分享②】批量装包与冒烟测试的自动化实现

利用AirtestIDE企业版与DeviceKeeper结合的多机跑测方案不仅解决了传统测试流程中的效率瓶颈,还为整个产品开发生命周期带来了革命性的变化!此文章来源于项目官方公众号:“AirtestProject” 版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言 在…

MySQL 延迟从库介绍

延迟从库主要适用于需要增强数据安全性和提高系统可用性的场合。通过合理配置和监控,可以有效利用延迟从库的优势来增强数据库系统的稳定性、可靠性和性能。前言: 我们都知道,MySQL 主从延迟是一件很难避免的情况,从库难免会偶尔追不上主库,特别是主库有大事务或者执行 DD…

使用open3d合并ply模型

import open3d as o3d from scipy.ndimage import binary_fill_holesdef merge_ply(ply1, ply2, output_path):# 加载两个多边形模型mesh1 = o3d.io.read_triangle_mesh(ply1)mesh2 = o3d.io.read_triangle_mesh(ply2)# 使用 + 运算符合并两个多边形模型merged_mesh = mesh1 + …

淘宝商品API接口:电商数据的金钥匙

在数字化浪潮的推动下,电商行业蓬勃发展,数据成为企业最宝贵的资产之一。淘宝,作为中国乃至全球最大的在线零售平台,其庞大的商品数据蕴含着无限商机。如何高效地获取并利用这些数据,成为电商从业者和开发者关注的焦点。本文将带您了解淘宝商品API接口的强大功能,以及如何…

DB9和DB15的引脚编号

1、DB9的引脚编号2、DB15的引脚编号

Win10笔记本,蓝牙设备自动断开

在Win10笔记本设备使用中,有些用户在使用蓝牙设备(蓝牙耳机)时常常会遇到自动断开问题,以下是参考解决方案:设置   ➡️  系统   ➡️  电源和睡眠   ➡️  其他电源设置由于默认的设置,会触发USB选择性暂停,将上图所圈出的配置,由已启用改为已禁用,然后确

[学习笔记] Splay Treap 平衡树 - 数据结构

[学习笔记] Splay & Treap 平衡树 - 数据结构 Splay 树又名伸展树,一种平衡二叉查找树,通过 \(\text{Splay}\) 操作不断把节点旋到根节点来维护整颗树的平衡。说人话,很玄学的玩意,复杂度是单 log 级别的。为啥是单 log,科学的解释请移步 OI-WIKI。不科学的解释就是,…

哈希-快乐数

解决这个问题的关键在于,判断结束遍历的条件,即当n!=1 或者 在循环过程中,没有出现过重复的数。class Solution:def isHappy(self, n: int) -> bool:def get_score(n):sum_ = 0while n > 0:end_ = n % 10sum_ += end_ ** 2 n = n // 10return sum_data_set = set()wh…

openGauss-资源池化特性说明

openGauss- 资源池化特性说明 可获得性 本特性自openGauss 3.1.1 版本开始引入。 特性简介 本特性提供主备机共享一份存储的能力,实现基于磁阵设备的资源池化HA部署形态,解决传统HA部署下存储容量较单机翻倍的问题,同时备机支持实时一致性读。资源池化架构图如下图所示。 图…