Maven原理学习
文章目录
参考链接:Maven基础篇(IDEA版)
一、Maven概述
Maven是一个项目管理工具,他包含了一个项目对象模型(POM),一组标准组合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期中插件目标的逻辑。
Maven能解决什么问题?
- 项目需要大量的jar包导入时,每次都要手动引入,很麻烦
- 单元测试很多时,需要一次性执行一个目录下的所有测试
- 打包项目时需要手动打包
如果有了maven,以上问题都可以很方便地解决。另外,如果有了maven,项目大小会大大减少,一个几十兆的项目经过maven管理后可以变得只有几十到几百KB。
二、maven依赖管理
简而言之:maven对jar包的管理过程

- maven将jar包单独放在一个仓库中,减少了重复打包jar文件,减小了项目大小。
- maven项目jar包坐标即项目中的pom.xml
三、maven文件结构
从官网上下载maven
解压到一个目录下,文件目录如下:

- bin目录(mvn.cmd用来构建项目):

- boot是maven自身运行的类加载器
- conf目录(settings.xml是maven配置的文件):

- lib(maven依赖的jar包)
四、maven仓库的种类以及彼此联系
maven仓库引用的jar仓库在哪呢?maven下的conf文件夹中打开settings.xml,有这样一句代码:
Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
表示在用户的home文件夹下创建.m2/repository文件夹作为本地仓库,用于存放jar包。
下面localRepository解除注释后可以作为自定义的本地仓库。

maven共有三种仓库:本地仓库、远程仓库[私服]、中央仓库
五、maven标准目录结构
| 目录 | 功能 |
|---|---|
| src/main/java | 核心代码部分 |
| src/main/resources | 配置文件部分 |
| src/test/java | 测试代码部分 |
| src/test/resources | 测试配置文件 |
| src/main/java | 核心代码部分 |
| src/main/webapp | 页面资源js,css,图片 |
六、mvn命令
目录的target目录保存编译后的文件
| 命令 | 功能 |
|---|---|
| mvn clean | 清除target目录(编译的文件) |
| mvn complie | 编译src\main\java,生成target目录 |
| mvn test | 执行第2命令,编译测试项目和项目,在target目录下多生成test-classes目录 |
| mvn package | 执行第2-3条命令,并打包项目,打成war还是jar要看pom.xml的packgeing标签 |
| mvn install | 执行第2-第4条命令,并且在把项目jar包安装在本地仓库 |
| mvn deploy | 执行第2-第5条命令,发布项目 |
七、maven生命周期
- 清理生命周期:执行mvn clean的过程
- 默认生命周期:简单点说就是compiler->test->package->install->deploy
- 站点生命周期:不做讲述
八、maven的概念模型

1. pom.xml:
| 标签 | 信息 |
|---|---|
| dependencies标签之前的信息 | 项目自身信息 |
| dependencies标签内 | 运行时所依赖的jar包信息 |
| build标签内 | 项目运行环境信息,比如jdk,tomcat |
2. 依赖管理模型:
放置的都是jar包坐标:
| 标签 | 信息 |
|---|---|
| groupId | 公司组织的名称 |
| artifactId | 项目名 |
| version | 版本号 |
| scope | 作用域,常用于解决jar包冲突问题 |
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.plug.in:
在maven的默认生命周期里,调用的构建命令都由maven的plug in插件去实现,达到一键构建的效果。
Maven原理学习的更多相关文章
- Maven的学习资料收集--(九) 构建SSH项目以及专栏maven
在这里整合一下,使用Maven构建一个SSH项目 1.新建一个Web项目 可以参照前面的博客 2.添加依赖,修改pom.xml <project xmlns="http://maven ...
- Maven之 学习资料
整理maven的学习资料,长期更新. 一.视频 1.孔浩老师的 maven视频教程 二.博客 1.黄勇: maven那些事儿 使用 OSC Maven 仓库 三.书籍 1.<Maven ...
- IIS原理学习
IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...
- zookkeper原理学习
zookkeper原理学习 https://segmentfault.com/a/1190000014479433 https://www.cnblogs.com/felixzh/p/58692 ...
- GIS原理学习目录
GIS原理学习目录 内容提要 本网络教程是教育部“新世纪网络课程建设工程”的实施课程.系统扼要地阐述地理信息系统的技术体系,重点突出地理信息系统的基本技术及方法. 本网络教程共分八章:第一章绪论,重点 ...
- 转:SVM与SVR支持向量机原理学习与思考(一)
SVM与SVR支持向量机原理学习与思考(一) 转:http://tonysh-thu.blogspot.com/2009/07/svmsvr.html 弱弱的看了看老掉牙的支持向量机(Support ...
- Android自复制传播APP原理学习(翻译)
Android自复制传播APP原理学习(翻译) 1 背景介绍 论文链接:http://arxiv.org/abs/1511.00444 项目地址:https://github.com/Tribler ...
- 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来 ...
- Dubbo原理学习
Dubbo源码及原理学习 阿里中间件团队博客 Dubbo官网 Dubbo源码解析 Dubbo源码解析-掘金 Dubbo源码解析-赵计刚 Dubbo系列 源码总结+最近感悟
随机推荐
- elasticsearch中query和filter的区别
参考博客来自: https://mp.weixin.qq.com/s/tiiveCW3W-oDIgxvlwsmXA?utm_medium=hao.caibaojian.com&utm_sour ...
- 在PHPstorm中使用数组短语法[],出现红色波浪
在PHPstorm中使用数组短语法[],出现红色波浪 1. 在tp3.2.3项目中使用数组短语法[],报错如下错误: Short array syntax is allowed in PHP 5.4 ...
- Python3-算法-递归
递归 递归算法是指一般通过函数或子进程来实现,在函数或子进程的内部,直接或间接地调用自己的算法,说白了就是自己调自己 注: 1.在使用递归的时候,必须要有一个递归出口,即一个明确的结束条件,否则就是死 ...
- pythonic context manager知多少
Context Managers 是我最喜欢的 python feature 之一,在恰当的时机使用 context manager 使代码更加简洁.清晰,更加安全,复用性更好,更加 pythonic ...
- IndentationError: unindent does not match any outer indentation level解决策略
[亲测有效]Nodepad++/Sublime Text3中Python脚本运行出现语法错误:IndentationError: unindent does not match any outer i ...
- 飞越面试官(二)--JUC
大家好!我是本号唯一官方指定没头屑的小便--怕屁林. JUC是什么东西?我相信很多经验尚浅的小伙伴部分都会为之一懵,我也是,三个字母都会读,连在一起就不知道在说什么,其实如果把它的全称写出来,“jav ...
- Mybatis一对一映射resultMap子标签中顺序问题
直接上图 鼠标点上红线出现如下提示 The content of element type "resultMap" must match "(constructor?, ...
- GitHub 热点速览 Vol.27:程序员的自我救赎——GitHub 摸鱼
作者:HelloGitHub-小鱼干 摘要:都知道 VSCode 有各种摸鱼小插件,边听云音乐.边在 IDE 斗地主,再来一个 NBA 直播,怎一个美滋滋了得.作为 VSCode 的同门,GitHub ...
- Java工具类之:包装类
Java工具类--包装类 我们都知道,JDK 其实给我们提供了很多很多 Java 开发者已经写好的现成的类,他们其实都可以理解成工具类,比如我们常见的集合类,日期相关的类,数学相关的类等等,有了这些工 ...
- pycharm设置字体和背景色
Pycharm字体和背景色设置 1 菜单字体大小设置 设置后: 2.编辑字体大小设置 3.背景色设置