Java——《面试题——maven篇》

news2024/11/16 19:36:01

全文章节

Java——《面试题——基础篇》

Java——《面试题——JVM篇》

Java——《面试题——多线程&并发篇》

Java——《面试题——Spring篇》

Java——《面试题——SpringBoot篇》

Java——《面试题——MySQL篇》​​​​​​

Java——《面试题——SpringCloud》

Java——《面试题——Dobbo篇》

Java——《面试题——Nginx篇》

Java——《面试题——MQ篇》

Java——《面试题——Linux篇》

Java——《面试题——Zookeeper篇》

Java——《面试题——Redis篇》

Java——《面试题——分布式篇》

Java——《面试题——网络篇》

Java——《面试题——设计模式篇》

Java——《面试题——maven篇》

Java——《面试题——ElasticSearch篇》

Java——《面试题——tomcat篇》​​​​​​

Java——《面试题——Git篇》

Java——《面试题——软实力篇》

本文目录

 前文

1、什么是maven?

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

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

5、什么是Maven的坐标?

6、讲一下maven的生命周期

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

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

9、说说maven的依赖原则

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

11、说说插件的解析机制


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无法访问

5、什么是Maven的坐标?

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

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

6、讲一下maven的生命周期

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

 每个阶段的说明:

 7、说说你熟悉哪些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项目文件
  • mvn jetty:run 启动jetty服务
  • mvn tomcat:run 启动tomcat服务
  • mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类

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

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

9、说说maven的依赖原则

最短路径原则(依赖传递的路径越短越优先)

pom文件申明顺序优先(路径长度一样,则先申明的优先)

覆写原则(当前pom文件里申明的直接覆盖父工程传过来的)

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

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

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

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

如果依赖的版本是SNAPSHOT,就基于更新策略读取所有远程仓库的元数据文件,将它与本地仓库对应的元数据合并,得到最新快照版本的值,然后根据该值检查本地仓库,或从远程仓库下载。

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

11、说说插件的解析机制

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

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

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

相关文章

Redis数据库的简介、部署及常用命令

Redis数据库的简介、部署及常用命令 一、关系数据库与非关系型数据库概述1、关系型数据库2、非关系型数据库3、关系数据库与非关系型数据库区别4、非关系型数据库产生背景 二、Redis简介1、Redis服务器程序的单线程模型2、Redis的优点 三、Redis部署四、Redis 命令工具1、redis…

全概率公式和贝叶斯公式

人工智能和机器学习中经常听到一个著名公式:贝叶斯概率公式。早已忘记了,赶紧记一下笔记。 (一)全概率公式: 注意:全概率公式成立的前提是Bi是样本的划分 其证明过程如下: (二&…

C++笔记之互斥锁,原子变量,条件变量对比

C笔记之互斥锁,原子变量,条件变量对比 code review! 目的:避免多线程间共享数据的竞态条件。 文章目录 C笔记之互斥锁,原子变量,条件变量对比1.std::mutex——互斥锁2.std::lock_guard3.std::unique_lock4.std::ato…

C++之lambda函数应用(一百四十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

如何看懂时序图(1):时序图基础知识

对于参考手册中经常出现的一些时序图,经常会让我摸不着头脑。比如对于Flash的时序图来说,要看懂的话,里面的每一个参数都得系统地学一遍,而且时序图中的一些符号也不太懂是什么意思。前一段时间调HyperRAM的时候,因为那…

冯·诺依曼架构哈佛架构(嵌入式学习)

冯诺依曼架构&哈佛架构 0. 前言1. 冯诺依曼架构(von Neumann architecture)关键组件限制&挑战 2. 哈佛架构关键组件限制&挑战 3. 冯诺依曼架构&哈佛架构的区别4. 知识扩展 0. 前言 冯诺依曼架构(von Neumann architecture&a…

Python 命令行参数

Python 命令行参数 1、sys 库 sys.argv 获取参数2、getopt 模块解析带-参数2.1 短参数shortopts2.1.1 无短参数2.1.2 短参数h无值2.1.3 短参数h有值2.1.4 多个短参数h:v 2.2 长参数longopts2.2.1 长参数无值2.2.2 长参数有值 2.3 有空格字符串值 1、sys 库 sys.argv 获取参数 s…

Kubernetes核心概念汇总—调度、抢占和驱逐(Pod 调度就绪态)

Pod 一旦创建就被认为准备好进行调度。 Kubernetes 调度程序尽职尽责地寻找节点来放置所有待处理的 Pod。 然而,在实际环境中,会有一些 Pod 可能会长时间处于"缺少必要资源"状态。 这些 Pod 实际上以一种不必要的方式扰乱了调度器(…

Vue3 如何去开发安卓 或者 ios

Vue3 有没有一款好用的开发原生的工具 1.uniapp 我个人认为uniapp 适合开发小程序之类的,用这个去开发原生应用会存在一些问题 性能限制:由于 Uniapp 是通过中间层实现跨平台,应用在访问底层功能时可能存在性能损失。与原生开发相比&#xf…

【Linux】调试工具gdb

目录 前言 一、前情了解 二、gdb常用命令 1.基本指令 2.断点 3.调试过程 4.查看内容 前言 gdb是Linux环境下了一个调试工具,在代码运行出现问题时,我们可以通过它来进行调试,找出问题的所在。本文来带大家来了解一下gdb的使用方法。 …

单片机第一季:零基础1

目录 1,第一章 2,第二章 1,第一章 单片机是全球用量最大的CPU,是物联网节点设备主控CPU,单片机是其他物联网编程技术的基础,通过学习单片机学习编程语言、调试技巧、工具使用等; 51单片机最简…

【前端笔记】indexDB使用简单介绍

什么是indexDB? IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用&…

chatgpt赋能python:如何用Python计算圆面积

如何用Python计算圆面积 介绍 圆是几何学中基本的图形之一,圆面积的计算是数学中的基础知识。使用Python编程语言可以快速、简便地计算圆的面积。本文将介绍如何使用Python编写圆面积计算器,并演示计算圆面积的步骤。无需高深的数学知识,只…

IPv6地址分类

一. 前言 IPv6地址分为单播地址,组播地址和任播地址。它们的地址详细分类和地址的范围如下图所示。 二. IPv6地址分类 1. 全球单播地址 类似于IPv4的公网地址,由前缀,子网ID和接口标识组成。 2. 链路本地地址 只能在连接到同一个本地链路的节…

《空指针》Optional解决链式调用NPE问题

Optional解决链式调用NPE问题 1.map() public class Main {public static void main(String[] args) {Person person new Person();Info personInfo new Info();int result;// 1.PersonInfo 为空person.setPersonInfo(null);result Optional.ofNullable(person).map(Person…

cpp-httplib

安装 cpp-httplib gitee链接: https://gitee.com/yuanfeng1897/cpp-httplib?_fromgitee_searchv0.7.15版本链接: https://gitee.com/yuanfeng1897/cpp-httplib/tree/v0.7.15把httplib.h拷贝到我们的项目中即可 接入cpp-httplib:header-only&#xff…

Kubernetes 1.27 版本基于(haproxy+keepalived)部署高可用集群

Kubernetes 1.27 版本基于(haproxykeepalived)部署高可用集群 二、系统架构2.1 架构基本需求2.2 架构图 三、环境准备3.1 云服务或虚拟机清单3.2 升级操作系统内核3.3 设置hostname3.4 修改hosts文件映射(注意替换你的规划每一台机器的IP&…

泛型深入~

1:泛型的概述的优势 2:泛型的好处 2:自定义泛型类 2:泛型类的原理 把出现泛型变量的地方全部替换成传输的真实数据类型 3:自定义泛型方法 4:自定义泛型接口 5:泛型通配符,上下限

03-1_Qt 5.9 C++开发指南_Qt核心特点(元对象系统特性:属性系统;信号与槽机制、动态类型转换;元对象特性测试实例)

Qt 是一个用标准 C编写的跨平台开发类库,它对标准 C进行了扩展,引入了元对象系统信号与槽、属性等特性,使应用程序的开发变得更高效。本章将介绍 Qt 的这些核心特点,对于理解和编写高效的 Ot C程序是大有帮助的;还介绍…

Servlet 项目创建和部署

目录 创建步骤: 1.创建项目 ​编辑2. 引入依赖 3.创建目录,复制内容 4.编写代码 5.打包 6.部署 7.验证 简化: 常见报错情况: 1.端口占用 2.路径错误 3.405 4.500 服务器代码抛出异常 5.依赖没下载好 创建步骤: 1.…