Maven面试题及答案(9道必考题解析)

Maven面试题及答案(9道必考题解析)-mikechen

Maven是Java面试经常问到的话题,下面给大家总结9道Maven必考题及答案,希望对你有所帮助@mikechen

1.Maven是什么?

Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。

Maven 的主要功能主要分为5点:依赖管理系统,多模块构建,一致的项目结构,一致的构建模型和插件机制。

 

2.为什么要用 Maven 构建?

过去传统的项目开发需要很多繁琐的配置,各种包、类什么的,一不小心就很容易搞错,所以现在会出现很多框架、工具帮助我们更加高效的开发。

Maven 是一个优秀的项目构建工具,使用Maven是为了更好的管理依赖、构建项目、管理项目信息,这样在开发和测试打包部署时,效率会提高很多。

Maven 还可以进行依赖的管理,使用 Maven 可以将不同系统的依赖进行统一管 理,并且可以进行依赖之间的传递和继承。

 

3. Maven的优缺点?

1)优点

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

2)缺点

  • maven是一个庞大的构建系统,学习难度大;
  • maven采用约定优于配置的策略,虽然上手容易,但是一旦出了问题,难于调试。

 

4.Maven里的modelVersion是什么?

modelVersion 描述这个POM文件是遵从哪个版本的项目描述符,项目描述符其实就是XML文件需要遵循的XSD规则。

对于Maven2及Maven 3来说,它只能是4.0.0

<modelVersion>4.0.0</modelVersion>:modelVersion指定了当前Pom模型的版本,固定为4.0.0

 

5.Maven的生命周期?

Maven有三套相互独立的生命周期,分别是clean、default和site,阶段是有顺序的,后面的阶段依赖于前面的阶段。

1、clean生命周期:清理项目,包含三个phase。

1)pre-clean:执行清理前需要完成的工作

2)clean:清理上一次构建生成的文件

3)post-clean:执行清理后需要完成的工作

2、default生命周期:构建项目,重要的phase如下:

1)validate:验证工程是否正确,所有需要的资源是否可用。
2)compile:编译项目的源代码。
3)test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
4)Package:把已编译的代码打包成可发布的格式,比如jar。
5)integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
6)verify:运行所有检查,验证包是否有效且达到质量标准。
7)install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
8)Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

3、site生命周期:建立和发布项目站点,phase如下:

1)pre-site:生成项目站点之前需要完成的工作

2)site:生成项目站点文档

3)post-site:生成项目站点之后需要完成的工作

4)site-deploy:将项目站点发布到服务器

 

6.Maven常见的依赖范围有哪些?

maven的依赖范围包括: compile,provide,runtime,test,system。

  • compile:表示编译范围,指A在编译时依赖B,该范围为默认依赖范围。编译范围的依赖会用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包。
  • provided:provied依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。例如:servlet api被Tomcat容器提供了。
  • runtime:runtime依赖在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包。
  • test:test范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。例如:Junit。由于运行时不需要,所以test范围依赖不会被打包。
  • system:system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。一般不推荐使用。

 

7.maven的依赖原则有什么?

maven一般有如下三种原则处理:

1)依赖路径最短优先原则

一个项目Demo依赖了两个jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由于X(2.0)路径最短,所以项目使用的是X(2.0)。

2)pom文件中申明顺序优先

如果A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven会根据pom文件声明的顺序加载,如果先声明了B,后声明了C,那就最后的依赖就会是X(1.0)。

3)覆写优先原则

子pom内声明的优先于父pom中的依赖。

 

8.Maven坐标概念是什么?

一般maven使用[groupID,artifactId,version,packaging]来表示一个项目的某个版本,有时还会使用classifier来表示项目的附属构建,常见的附属构建有javadoc和sources包。

 

9.Mvn Clean Package执行哪些动作?

在这个命令中我们调用了maven的clean周期的clean阶段绑定的插件任务,以及default周期的package阶段绑定的插件任务。

默认执行的任务有(maven的术语叫goal, 也有人翻译成目标,我这里用任务啦):

  • maven-clean-plugin:clean->
  • maven-resources-plugin:resources->
  • maven-compile-plugin:compile->
  • mavne-resources-plugin:testResources->
  • maven-compile-plugin:testCompile->
  • maven-jar-plugin:jar

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法