您的位置:首页 > 职场人生

#maven的面试题

2020-02-17 08:39 253 查看

##1. Maven是什么?
Maven是⼀个项⽬构建⼯具,服务于项⽬构建,包括创建、编译、测试、发布等等,除了Maven,还有
⼀个项⽬构建⼯具:Gradle
##2.maven有哪些优点?
(1)依赖管理,节省空间
(2)一键构建 编码 编译 测试(junit) 运行 打包 部署
(3)应用于大型项目 可以提高开发效率

##3.maven 的目录结构
main
java
resources
test
java
resources

##4.坐标的组成
Gruop Id
Ar0tifact Id
Version

##5.Maven的仓库
所有的项⽬都有坐标,唯⼀的标识,这个标识同样也是maven仓库的存储路径。
对于Maven来说,仓库只分为两类:本地仓库 和 远程仓库。
项⽬依赖,先查找本地仓库,如果没有,查找远程仓库,下载到本地仓库,然后项⽬依赖使⽤。

  1. 本地仓库:
    默认保存到⽤户⽬录的.m2中
    也可以通过修改配置⽂件改到其他地⽅
  2. 远程仓库
    中央仓库:maven中央仓库、阿⾥云镜像库(默认只会从这⾥下载)
    私服:局域⽹使⽤,安全、速度快、可以上传⾃⼰的私有东⻄
    第三⽅的公共库:Jboss、java.net(⽹络相关的类库)
  3. 如何配置私服和第三⽅的公共库
    全局配置:直接修改maven的配置⽂件
    局部配置:修改项⽬的配置⽂件即可
    ⾃⼰去百度整理,试⼀下

##6. Maven的常⽤命令
Mvn clean : 清理
Mvn compile:编译
Mvn package:打包
mvn test : 测试,⾃动运⾏所有的测试⽤例
mvn install : 安装,将项⽬打的包安装到本地仓库,其他项⽬就可以依赖了
Mvn jetty:run : 运⾏jetty插件

##7. Maven的坐标和依赖
所有的maven项⽬都有⼀个唯⼀的坐标作为标识,肯定是不能重复的,其他项⽬通过坐标进⾏依赖的导

  1. maven的坐标组成部分
    groupId: 组织机构id,org.aptech.hdax, org.springframework
    artifactId: ⼦项⽬编号,springmvc, spring-test, spring-core
    version: 版本号,可以⼀直迭代,平时项⽬开发⽤的是快照版本 0.0.1-SNAPSHOT
    Package: jar war pom
  2. 项⽬依赖的核⼼概念:
    框架整合最害怕jar包冲突,之前不使⽤maven,经常出现这个⽂件。
    依赖范围 scope标签进⾏配置
    Compile: 默认值,项⽬打包的时候会把该依赖包打进去
    Test : 测试依赖,只是在运⾏测试⽤例的时候会⽤到,打包是不打进去的
    Provided: 提供依赖,类似于test
    传递依赖
    a -> b, b->c ,如果在a中导⼊到b的依赖,c会⾃动过来
    依赖调解
    如果不同的包传递依赖了⼀个相同的jar,但是版本不⼀致
    原则:
    最短路径
    第⼀声明优先原则
    排除依赖
    归类依赖: ⽅便后期的依赖版本升级、降级

##8. Maven的⽣命周期
可能会想起: servlet的⽣命周期:实例化、初始化、服务、销毁
mvn clean package
三套独⽴的⽣命周期,每个⽣命周期对应不同的阶段phase
ü Clean Lifecycle 在进⾏真正的构建之前进⾏⼀些清理⼯作。
ü Default Lifecycle 构建的核⼼部分,编译,测试,打包,部署等等。
ü Site Lifecycle ⽣成项⽬报告,站点,发布站点。
每套⽣命周期都由⼀组阶段(Phase)组成,我们平时在命令⾏输⼊的命令总会对应于⼀个特定的阶段.

##9.依赖的解析机制
解析发布版本:如果本地有,直接使用本地的,没有就向远程仓库请求。
解析快照版本:合并本地和远程仓库的元数据文件-groupId/artifactId/version/maven-metadata.xml,这个文件存的版本都是带时间戳的,将最新的一个改名为不带时间戳的格式供本次编译使用。
解析版本为LATEST,RELEASE,过于复杂,且解析的结果不稳定,
不推荐在项目中使用,感兴趣的同学自己去研究,简而言之就是合并groupId/artifactId/maven-metadata.xml找到对应的最新版本和包含快照的最新版本。

##10.多模块如何聚合
配置一个打包类型为pom的聚合模块,然后在该pom中使用元素声明要聚合的模块

11.常见的Maven私服的仓库类型。

(宿主仓库)hosted repository, (代理仓库)proxy repository, (仓库组)group repository

12.maven缺点如下:

maven是一个庞大的构建系统,学习难度大
maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是一旦出了问题,难于调试。
当依赖很多时,m2eclipse 老是搞得Eclipse很卡。
中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等。

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

##14.什么是 Maven 插件?
Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。插件通常提供了一个目标的集合,并且可以使用下面的语法执行:mvn [plugin-name]:[goal-name]

Maven 提供了下面两种类型的插件:

Build plugins :在构建时执行,并在 pom.xml 的 元素中配置。
Reporting plugins :在网站生成过程中执行,并在 pom.xml 的元素中配置。

##15. 什么是私服?

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

##Maven 私服的 5 个特性:

1、节省自己的外网带宽:减少重复请求造成的外网带宽消耗。
2、加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低。
3、部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部 Maven 项目使用。
4、提高稳定性,增强控制:Internet 不稳定的时候,Maven 构建也会变的不稳定,一些私服软件还提供了其他的功能。
5、降低中央仓库的负荷:Maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力。

当前主流的 Maven 私服:

Apache 的 Archiva
JFrog 的 Artifactory
【主流】Sonatype 的 Nexus 。

##常见的 Maven 私服的仓库类型:
(宿主仓库)hosted repository 。
(代理仓库)proxy repository 。
(仓库组)group repository 。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
网络pen子手 发布了2 篇原创文章 · 获赞 0 · 访问量 89 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: