Maven基本概念和操作
最近在学Java,找来一个开源项目练手,它是用 Spring Boot 搭建的框架,于是去学 Spring Boot,然而 Spring Boot 需要有 Spring 框架和 Maven 的使用经验,于是就来学 Maven 并作了一点笔记,预计过段时间会学习并整理 Spring 框架的笔记
1 WHY
之前看过别人说,学一样东西,首先要知道为什么要用这个东西,在没有这个东西之前,行业是怎样运转工作的,而这个东西的出现解决了哪些痛点,有什么优势,这样才能深入理解学习
- 借助于Maven可以将一个项目拆分成多个工程,便于管理、分工
- 借助于Maven可以将jar包仅仅保存在仓库中,有需要使用的工程引用这个文件接口,不再需要真的把jar包复制过来
- 借助于Maven可以以一种规范的方式下载jar包,因为所有知名框架或第三方工具的jar包都按照统一规范存放在了Maven的中央仓库,不再需要自己一个个去寻找下载
- 借助于Maven可以自动导入一个jar包所依赖的其他jar包
2 WHAT
Maven是一个服务于Java平台的 自动化构建 工具(Make → Ant → Maven → Gradle)
构建的概念:以java源文件、框架配置文件、JSP、HTML、图片等资源为原材料,去生产一个可以运行的项目的过程,包括编译、部署、搭建
编译:Java源文件 → 编译 → Class字节码文件 → 交给JVM去执行
部署:项目最终运行的并不是web工程本身,而是这个web工程编译的结果,部署就是将编译结果拿到服务器上的指定目录下的过程,动态web工程 → 编译、部署 → 编译结果
- 构建过程中的各个环节:
- 清理:将以前编译得到的旧的Class字节码文件删除,为下一次编译做准备
- 编译:将Java源程序编译成Class字节码文件
- 测试:自动测试,自动调用Junit程序
- 报告:测试程序执行的结果
- 打包:动态web工程打WAR包,Java工程打JAR包
- 安装:Maven特定的概念,将打包得到的文件复制到仓库中的指定位置
- 部署:将WAR包复制到servlet容器的指定目录下,使其可以运行
2.1 Maven的核心概念
2.1.1 约定的目录结构
1 |
ProjectName 根目录:工程名 |
2.1.2 POM
- Project Object Model 项目对象模型,pom.xml 是Maven工程的核心配置文件
2.1.3 坐标
- 使用下面三个向量在仓库中唯一定位一个Maven工程:(Maven仓库也是这样定位)
groupid:公司或组织域名倒序 + 项目名
artifactid:模块名
version:版本
2.1.4 依赖 dependency
Maven解析依赖信息时会去仓库寻找依赖的JAR包,对于自己开发的Maven工程,要想使用依赖,需要先将其加入到本地仓库,方法:在工程pom.xml所在目录下,使用
mvn install命令依赖的范围scope主要有三种:compile,test,provided,区别如下:
| 依赖范围 scope | 对主程序是否有效 | 对测试程序是否有效 | 是否参与打包 | 是否参与部署 | 典型例子 |
|---|---|---|---|---|---|
| compile | 有效 | 有效 | 参与 | 参与 | spring-core |
| test | 无效 | 有效 | 不参与 | 不参与 | junit |
| provided | 有效 | 有效 | 不参与 | 不参与 | servlet-api.jar |
1 |
<dependencies> |
依赖的传递性:导入某个依赖,它所依赖的父依赖也会跟着传递过来,因此可以传递的依赖不必在每个工程中重复声明,在最底层的工程中依赖一次即可;注意:非compile范围的依赖不能传递,要想使用就要重复声明
依赖的排除:不想导入传递过来的父依赖,可使用下面的语句将其排除,插在dependency之内
1 |
<exclusions> |
- 统一管理依赖的版本:使用
<properties></properties>标签配合自定义标签
2.1.5 仓库 repository
- 默认本地仓库地址 C:Usersusername.m2repository
- 本地仓库中没有的,会去远程仓库下载(私服、中央仓库、中央仓库镜像)
- 仓库中存放的是Maven工程,包括各种插件、第三方框架或工具的JAR包、自己开发的Maven工程
2.1.6 生命周期 lifecycle、插件 plugin
- 生命周期是指各个构建环节的执行顺序
- 生命周期各个阶段的具体任务是由插件完成的,各个阶段与插件的目标对应
- 不论现在要执行生命周期的哪一个阶段,都是从这个生命周期最初的位置开始执行
2.1.7 继承
- 以junit为例:junit处于test范围,由于test范围的依赖不能传递,分散在各个工程中,很容易造成版本不一致,给协同开发带来问题,因此需要对各个工程对junit依赖的版本进行统一管理
- 解决思路:将junit依赖版本统一提取到父工程中,在子工程中声明依赖时不指定版本,以父工程中的设定为准,便于修改
2.1.8 聚合
- 一键安装各个模块工程
3 HOW
3.1 常用的Maven命令(cmd命令行)
- 注意:执行命令时必须要进入pom.xml所在目录
1 |
mvn clean:清理 |
3.2 Maven 在 IntelliJ IDEA 中的使用
这部分要是详细写能写单独一篇,很多细致的操作我还没用到也还没学,在此先记录一下用Maven创建web工程的初始步骤,虽然看上去简单,但对于我一个新手,还是摸索了好久
- 新建一个工程

- 选择Maven,勾选create from archetype,选择maven-archetype-webapp
- 输入groupid和artifactid,然后next-next-finish
- BUILD SUCCESS之后,开始配置Tomcat:点击右上角Add configuration,在弹出窗口中点击左上角的“+”号,选择Tomcat server - local,填写Name,Application server,open browser,看到下方Warning后点击Warning右侧的Fix,选择war exploded,最后点OK,则Tomcat配置完毕

Maven基本概念和操作的更多相关文章
- Maven - Maven基础概念和操作总结
1-下载及安装 1.1 - Maven - 项目管理利器 http://maven.apache.org/ Apache组织的开源项目. Maven是一个基于POM(Project Object Mo ...
- Maven(三)理解Maven核心概念
转载自: http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 本文以类图的方式,介绍maven核心的12个概念以及相互之间的 ...
- maven的概念-01
1.maven 简介 maven是Apach软件基金会维护的一款自动化构建工具: 作用是服务于java平台的项目构建和依赖管理: 2.关于项目构建 1)java代码 Java是一门编译型语言,.j ...
- Maven是什么? Maven的概念+作用+仓库的介绍+常用命令
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型.一组标准集合,一个依赖管理系统.和用来运行定义在生命周期阶段中插件目标和逻辑. 核心功能 Maven的核心 ...
- clearcase 中一些概念和操作
clearcase 中一些概念和操作 视图 常用命令 ClearCase 安装和使用的一些FAQ 参考 ClearCase具体的说是做配置管理的工具,只是SCM管理工具其中的一种.是RATIONAL公 ...
- 基本数据结构——堆(Heap)的基本概念及其操作
基本数据结构――堆的基本概念及其操作 小广告:福建安溪一中在线评测系统 Online Judge 在我刚听到堆这个名词的时候,我认为它是一堆东西的集合... 但其实吧它是利用完全二叉树的结构来维护一组 ...
- TensorFlow简易学习[1]:基本概念和操作示例
简介 TensorFlow是一个实现机器学习算法的接口,也是执行机器学习算法的框架.使用数据流式图规划计算流程,可以将计算映射到不同的硬件和操作系统平台. 主要概念 TensorFlow的计算可以表示 ...
- Java-Maven(六):Eclipse中Maven插件的命令操作
之前几个章节学习了maven的概念,及maven插件安装后如何创建工程,那么maven工程中是如何使用maven命令呢?本章节将会学习这个话题. 在pom.xml中配置maven命令插件 如果向在ma ...
- Linux 基本概念和操作2
接着上一篇 "Linux 基本概念和操作" 1.删除文件 有时候我们想要删除的文件是只读文件,直接使用rm 文件名,会报错.这时使用" -f " 参数强制删除. ...
随机推荐
- Django专题
一. web框架的原理: 1.C/S架构和B/S架构 C/S:客户端与服务器 B/S:浏览器与服务器 web开发 2.web开发的本质: socket服务端:收发消息都是按照HTTP协议的 ...
- 关于Ueditor富文本编辑器的配置和使用心得
一.环境和项目架构 本文章只是为了便于我个人记录日常笔记,如有错误或缺陷,请指出,文章仅供参考,如有转载请附上本文章链接. 介绍:将Ueditor富文本提交的内容直接生成Html文件,传到后台直接保存 ...
- spring mvc + ajax上传文件,页面局部刷新
1.点击上传按钮进行如下操作,通过表单名称以及input名称获取相应的值,对于上传的文件,使用.files来获取, 因为包含文件的上传,所以采用FormData的形式来进行数据交互,通过append将 ...
- 实现文件上下文管理(\_\_enter\_\_和\_\_exit\_\_)
实现文件上下文管理(__enter__和__exit__) 我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句 ...
- 模仿u-boot的makefile结构
u-boot(2014.04)是通过顶层makefile调用各子目录中的makefile来实现整个工程的编译的,实际上子目录的makefile是include进来的.这里仿照这种结构写个模板测试一下. ...
- Android之UI View与ViewGroup
1.基本概念 View:所有可视化控件的父类,Android App屏幕上用户可以交互的对象(例如 按钮 下拉框 文本框等). ViewGroup:View的子类,存放View和ViewGroup对象 ...
- 领导力 / LeaderShip
领导力 / LeaderShip 什么是领导力? 结合我自己的经验,谈谈理解. 我们人类社会,发展到现在,已经成为了一个集合体,这一点在工业革命之前,表现的极为明显. 常见的社会发展形态,会按照人与人 ...
- day41-进程-管道
#1.管道Pipe:双向通信: from multiprocessing import Pipe p1,p2 = Pipe() p1.send('hello') print(p2.recv()) p2 ...
- 用Kinect为听障人士架一座沟通的桥梁
编者按:这是微软亚洲研究院和中国科学院共同进行的一个合作项目,希望通过使用Kinect来帮助提升手语的识别率,从而为听力受损的残障人士(以下简称听障人士)架起一座与外界沟通的桥梁. 文章译自:Digi ...
- F5 BIG-IPLTM串联组网连接模式