1、maven 是干什么的?
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟
2、Maven 解决了什么痛点?
① 添加第三方 jar 包
手动会出现 jar 包冲突,版本冲突。通过统一的 Maven 仓库我们可以享受到一个完全统一规范的 jar 包管理体系。
② jar 包之间的依赖关系
Maven 可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来,无需人工参与,节约了我们大量的时间和精力。
③ 将项目拆分成多个工程模块
3、Maven 的同类技术
Java世界中主要有三大构建工具 Ant、Maven和Gradle
你用的构建工具? 单选 0人 0% A.Ant 0人 0% B.Maven 0人 0% C.Gradle
Ant(Another Neat Tool), 开始主要用来构建著名的 Tomcat ,产生的动机是由于作者 James Duncan Davidson 受不了 Makfile 的语法格式。
Ant
Maven 的产生,也是由于厌倦了日复一日的手工构建工作,对各个项目风格迥异的构建系统感到麻烦。Maven 的依赖管理以及项目构建规则重用性等特点,让 Maven几乎成为 Java构 建工具的事实标准。
Maven
Gradle 作为新的构建工具,基于 Groovy 语言的构建工具,既保持了 Maven 的优点,通过使用 Groovy 定义,克服了 Maven 中使用 XML 繁冗以及不灵活等缺点,它最后被 google 作为了 Android 御用管理工具。
Gradle
4、使用 Maven 的环境配置
环境配置都是一个套路,不详细展开。
① Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK
② Maven 安装
注意:以 Idea 打开项目为例,每当我们从 gitlab 上 clone 项目时,通常使用的是 idea 自带的 maven 路径。
实际开发中我们的很多依赖包是从公司私库里下载的,你需要找同事要一份 setting.xml 文件替换你原有的文件。
在 windows 下,我们一般将文件不放到 C 盘,放到其他盘符中。
5、Maven 的约定配置
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构
6、Maven 构建生命周期
【面试:maven package与maven install 命令的区别? 】
在项目中经常会发生,一个子项目修改了但是其他有依赖该子项目的项目却依赖不到。
① maven install:打包好的 jar 包会安装到本地的 maven 仓库中,使用的配置是默认的配置,供其他项目使用。
② maven package 打包后的文件存放到项目的 target 目录下。
总结:
如果子项目之间的工程,发生改动,改动的子项目要进行maven install,然后需要调用该子项目的子项目进行maven package
最简单的方式就是父工程进行 maven install
最烦人的是这种情况,依赖的是远程私库的包,如果你是一名开发者,你修改了这个远程包,一定要记得 clean、install 和 deploy ,不然其他开发者的项目会报错。
7、Maven 仓库分类
Maven 的仓库只有两大类:
1、本地仓库
2、远程仓库
在远程仓库中又分成了 3 种:
① 中央仓库
② 私服
③ 其它公共库
Maven 会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。
但中央仓库只有一个,最好从其镜象处下载。国内可以用阿里云下的服务器。【其它公共库】
也有通过 Nexus 搭建的私服进行获取的。【私服】
我们也 把 Maven 中的仓库分为两种:
① SNAPSHOT 快照仓库
② RELEASE 发布仓库
SNAPSHOT 快照仓库用于保存开发过程中的不稳定版本,RELEASE 正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在 pom 文件中在该模块的版本号后加上 -SNAPSHOT 即可(注意这里必须是大写)
Maven 会根据模块的版本号(pom 文件中的 version)中是否带有 -SNAPSHOT 来判断是快照版本还是正式版本。
a.如果是快照版本,那么在 mvn deploy 时会自动发布到快照版本库中,会覆盖老的快照版本。而在使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,Maven 会自动从镜像服务器上下载最新的快照版本。
b.如果是正式发布版本,那么在 mvn deploy 时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改 pom 文件提示版本号来下载新的版本,直接 mvn 执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。