目录

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项目文件
  • mvnjetty:run 启动jetty服务
  • mvntomcat: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需要的插件在本地仓库不存在时是不会去我们以前配置的远程仓库查找 插件的,而是需要有专门的插件远程仓库。

阿里内部资料,10W字总结JAVA面试题-Maven篇相关推荐

  1. 阿里内部资料!10W字总结JAVA面试题-基础篇

    目录 1.JAVA语言有哪些特点 2.面向对象和面向过程的区别 3 .八种基本数据类型的大小,以及他们的封装类 4.标识符的命名规则. 5.instanceof 关键字的作用 6.Java自动装箱与拆 ...

  2. 阿里内部资料,10W字总结JAVA面试题-Git篇

    目录 ​ 1.Git和SVN有什么区别? 2.什么是Git? 3.在 Git 中提交的命令是什么? 4.什么是 Git 中的"裸存储库"? 5.Git 是用什么语言编写的? 6.在 ...

  3. 阿里内部资料,10W字总结JAVA面试题-设计模式篇

    目录 1.说说什么是单例模式 2.说说你对代理模式的理解 3.说说工厂模式 4.抽象工厂模式 5.装饰器模式是什么 6.代理模式和装饰器模式有什么区别? 7.模板方法模式 8.知道享元模式吗? 9.享 ...

  4. Java面试题-进阶篇(2022.4最新汇总)

    Java面试题-进阶篇 1. 基础篇 1.1 基本数据类型和包装类 1.2 Double转Bigdecimal可能会出现哪些问题?怎么解决? 1.3 equals 与 == 的区别? 1.4 Java ...

  5. Java面试题基础篇(一)

    Java面试题基础篇(一) Java面试题基础篇(一) 1.jre和jdk有什么区别? 2.==与equals的区别? 3.接口和抽象类的共同点和不同点? 4.lamda表达式的优缺点? 5.Stri ...

  6. 阿里内部全新整理,Java面试题库+全栈笔记限时开源

    说到面试跳槽,大家从当初入行开始就一直摆脱不开它(咱们就是通过不断跳槽才能更快地提升自己).在我们的技术生涯中会有很多大大小小的面试,对我们程序员来说每一次面试都是一次提升的机会,不管是简历修改,还是 ...

  7. 自阿里P8爆出1031道java面试题后,我在boss直聘狂拿千份Offer

    前言 开始之前我问大家几个问题,看大家是如何思考的: 1.程序员一定要去一线城市漂泊吗?在自己家乡如何拿到一份满意的薪水? 2.程序员被裁员.找不到工作,代表什么? 3.程序员一定要进一线大厂吗?你是 ...

  8. 年终盘点 | 2019年Java面试题汇总篇(附答案)

    作者 | 老王 来源 | Java中文社群「微信公众号」 在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几 ...

  9. 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案

    在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当然其中有不少的面试题来源 ...

最新文章

  1. Go基础(复杂类型):映射
  2. php数组根据指定列排序
  3. 福爆 | 博客升级 .NET Core 3.0 又踩一坑
  4. html 输入框自动缩短 一行内显示,JQuery UI组合框自动补全功能改进版(即时全部显示+input内容保存)...
  5. BZOJ 1601 [Usaco2008 Oct]灌水 (最小生成树)
  6. java/05/(Swing包)窗体,组件,布局管理器,面板,监听事件
  7. Java导出源程序_JAVA导出项目的所有源代码到一个文件
  8. 计算几何之凸包_卷包裹算法
  9. 士林变频器面板如何调速度_工业电气设计|变频器在应用中的故障处理实例分享...
  10. 填坑唯品会分布式调度Saturn
  11. 奇葩算法系列——猴子排序
  12. vs2016 程序在vs2019 运行,显示无法找到 Intel C++ Compiler XE14.0解决方案
  13. Entity Framework自定义迁移历史表(EF6以上)
  14. Exiftool 命令行操作图片元信息(Megadata)
  15. 按键精灵_Wscript.Shell操作
  16. 「全网最细」:MRP1视图所有字段详解及实战应用 - 合集
  17. 图神经网络12-分子指纹GCN:Neural FPs
  18. 一文读懂程序化交易算法交易量化投资高频交易统计利
  19. 银行间本币市场上下行接口
  20. 关于时隙、RB、RE、REG、CCE、RBG等概念的笔记

热门文章

  1. 金晓龙获批担任蚂蚁消金董事长,年内多家消费金融公司一把手换人
  2. 哈希树总结-java版
  3. 磨砺自己,静待花开——记南大通用GBase 8a培训
  4. Apple MackBook 选购比较
  5. Unity 常见优化
  6. 【B2B】酒店客房影音解决方案
  7. 自己动手设计一款iOS自动构建发布工具
  8. Jetpack Compose自定义绘测 画太阳
  9. python怎么输出字符串中特定位置的字符?
  10. C语言之输出字符串长度