小汤学编程之JavaEE学习day08——Maven
一、Maven介绍
1.什么是Maven 2.Maven的功能 3.什么是构建 4.项目的构建方式
二、Maven的安装
1.下载 2.安装 3.配置 4.修改Maven中央仓库地址
三、创建Maven工程
1.Maven工程结构 2.创建工程 3.Maven命令的使用
四、Maven核心概念
1.Maven坐标的组成 2.依赖管理 3.生命周期 4.插件 5.继承项目 6.聚合项目
五、Maven仓库
1.什么是Maven仓库 2.仓库的分类
一、Maven介绍
1.什么是Maven
Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进行管理的工具。
Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上。
2.Maven的功能
- 管理依赖(即jar包)
- 项目构建
3.什么是构建
一个项目的构建一般要经过以上六个步骤。
4.项目的构建方式
- Eclipse构建
使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作。 - Ant构建
它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪。 - Maven构建
它是一个项目管理工具,他也是一个项目构建工具,通过使用maven,可以对项目进行快速简单的构建,它不需要告诉maven很多信息,但是需要安装maven去的规范去进行代码的开发。也就是说maven是有约束的。
二、Maven的安装
1.下载
官网:http://maven.apache.org
2.安装
- 第一步:配置maven的环境变量MAVEN_HOME
- 第二步:配置maven的环境变量PATH
- 第三步:测试maven是否安装成功,在系统命令行中执行命令:
mvn –v
3.配置
- 全局配置(默认)
在maven安装目录的conf里面有一个settings.xml文件,这个文件就是maven的全局配置文件。 - 用户配置
用户配置文件的地址:~/.m2/settings.xml(如C:/Users/admin.m2/settings.xml),该文件默认是没有,没有的话则使用全局配置文件的配置,需要将全局配置文件拷贝一份到该目录下,才能让用户配置生效。
用户配置文件里,使用
<localRepository>E:\repository</localRepository>
为该用户指定本地仓库地址,若不指定默认为~/.m2/repository目录。
4.修改Maven中央仓库地址
在全局配置或用户配置的settings.xml文件内容加入如下代码即可:
<mirrors><!-- 阿里云仓库 --><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>https://maven.aliyun.com/repository/central</url></mirror><!-- 中央仓库1 --><mirror><id>repo1</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo1.maven.org/maven2/</url></mirror>
</mirrors>
三、创建Maven工程
1.Maven工程结构
下面是两种常见的Maven工程结构:
Java工程
web工程
2.创建工程
使用命令行创建
- 创建Java工程
mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-quickstart
- 创建web工程
mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-webapp
使用Idea创建
File->New->Project->Maven->选择模板
3.Maven命令的使用
代码 | 命令 | 说明 |
---|---|---|
Maven compile | 编译命令 | 重新编译 |
Maven clean | 清楚命令 | 清除已经编译好的class文件,具体说清除的是target目录中的文件 |
Maven test | 测试命令 | 该命令会将test目录中的源码进行编译 |
Maven package | 打包命令 | 重新打包 |
Maven install | 安装命令 | 会将打好的包,安装到本地仓库 |
组合命令:以上命令可以进行组合使用,如:
mvn clean compile
mvn clean test
mvn clean package
mvn clean install
四、Maven核心概念
1.Maven坐标的组成
Maven坐标是为了定位一个唯一确定的jar包或者项目模块。
- groupId 定义当前Maven组织名称
- artifactId 定义实际项目名称
- version 定义当前项目的当前版本
例如:
<!-- mysql -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version>
</dependency>
2.依赖管理
依赖范围
其中依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系。
- compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
- test:测试依赖范围。只对于测试classpath有效
- provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
- runtime:运行时提供。例如:jdbc驱动
如:
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope><!-- 测试依赖范围 -->
</dependency>
依赖传递
假如有三个工程A、B、C,B依赖A,C依赖B,那么B是C的直接依赖,A是C的间接依赖。
依赖传递范围:
左边第一列表示第一直接依赖范围,
上面第一行表示第二直接依赖范围,
中间的交叉单元格表示传递性依赖范围。
总结:
- 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
- 当第二直接依赖的范围是test的时候,依赖不会得以传递。
- 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
- 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
依赖冲突
在maven中存在两种冲突方式:
- 一种是跨pom文件的冲突
按照 就近原则。 - 一种是同一个pom文件中的冲突
下面依赖的覆盖上面的依赖。
可选依赖
<optional>true/false</optional>
Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。
排除依赖
Exclusions 标签可以排除依赖,格式如下:
<exclusions><exclusion><groupId></groupId><artifactId></artifactId></exclusion>
</exclusions>
3.生命周期
Maven有三个生命周期:
- clean生命周期
- default生命周期
- site生命周期
生命周期可以理解为项目构建的步骤集合。
生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段。
clean生命周期
阶段 | 说明 |
---|---|
pre-clean | 执行一些需要在clean之前完成的工作 |
clean | 移除所有上一次构建生成的文件 |
post-clean | 执行一些需要在clean之后立刻完成的工作 |
mvn clean命令 | 等同于mvn pre-clean clean |
只要执行后面的命令,前面的命令都会执行,不需要再新去输入命令。这极大地简化了程序猿的操作。
default生命周期(重点)
default生命周期 |
---|
validate |
generate-sources |
process-sources |
generate-resources |
process-resources 复制并处理资源文件,至目标目录,准备打包。 |
compile 编译项目的源代码(常用) |
process-classes |
generate-test-sources |
process-test-sources |
generate-test-resources |
process-test-resources 复制并处理资源文件,至目标测试目录。 |
test-compile 编译测试源代码。 |
process-test-classes |
test 使用合适的单元测试框架运行测试,这些测试代码不会被打包或部署(常用) |
prepare-package |
package 接收编译好的代码,打包成可发布的格式,如 JAR (常用) |
pre-integration-test |
integration-test |
post-integration-test |
verify |
install 将包安装至本地仓库,以让其它项目依赖(常用) |
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享 |
site生命周期
site生命周期 | 说明 |
---|---|
pre-site | 执行一些需要在生成站点文档之前完成的工作 |
site | 生成项目的站点文档 |
post-site | 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 |
site-deploy | 将生成的站点文档部署到特定的服务器上 |
4.插件
每个插件(plugin)都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是由插件来实现的。
下面介绍两种常用的插件:
编译插件
我们常用的配置JDK版本的方式是在POM.xml的properties标签里设置:
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
</properties>
其实也可以使用编译插件来配置:
<plugin><groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration>
</plugin>
Tomcat插件
在命令行使用mvn tomcat:run
命令可以使用tomcat插件来启动web工程,但默认版本为tomcat6。
我们一般在插件里进行如下配置:
<!-- Tomcat插件 -->
<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version>
</plugin>
这样可以使用tomcat7运行web工程,但命令要改为mvn tomcat7:run
5.继承项目
即父子项目,外层为父项目,里面又创建子项目。父项目的依赖可以被子项目继承。
6.聚合项目
外面一个大项目,里面分功能创建多个小项目,小项目之间可以是依赖的关系。聚合项目的优点是可以使代码各部分功能清晰划分,缺点使编写调试时重启太慢了。
五、Maven仓库
1.什么是Maven仓库
用来统一存储所有Maven共享构建的位置就是仓库。
根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:
groupId/artifactId/version/artifactId-version.packaging
。
2.仓库的分类
- 本地仓库
默认在~/.m2/repository,如果在用户配置中有配置,则以用户配置的地址为准。 - 远程仓库
部署在网上的其他人的仓库,比阿里的或者Maven官方自己的中央仓库。 - 私服
一般是部署在自己公司的服务器上,相当于将网上其他的中央仓库里的文件缓存在自己的服务器上,多人或者多次使用时可以极大的提高下载速度。
小汤学编程之JavaEE学习day08——Maven相关推荐
- 小汤学编程之JavaEE学习day06——LayUI
一.LayUI简介 1.下载 2.入门案例 二.栅格布局 三.图标 四.按钮 1.按钮类型 2.主题 3.尺寸 4.圆角 5.按钮组 五.后台布局 六.表格数据 ...
- 小汤学编程之JavaEE学习day07——版本控制工具:SVN、GIT
一.SVN 1.SVN介绍 2.SVN安装 3.SVN操作 二.GIT 1.GIT介绍 2.集中式和分布式 3.GIT的基本使用 4.GIT时光机 5. ...
- 小汤学编程之JavaEE学习day05——会话管理、文件上传与下载、Ajax
一.会话管理 1.HTTP协议 2.会话的概念 3.会话跟踪技术 4.会话跟踪技术分类(四种) 二.文件上传与下载 1.上传 2.下载 3.上传和下载合并优化成 ...
- 小汤学编程之JavaEE学习day01——HTTP简介、B/S与C/S应用、连接的建立与断开、Tomcat
一.HTTP简介 1.HTTP请求报文 2.HTTP响应报文 二.B/S与C/S应用 三.连接的建立与断开 1.连接的建立(三次握手) 2.断开连接(四次挥手) 四.连接的建立与断开 ...
- 小汤学编程之JavaEE学习day10——Spring
一.Spring简介 1.特点 2.核心特性 3.两大核心 二.Spring环境搭建 1.导包 2.准备数据库和表.实体类 3.定义dao层接口和接口映射文件 ...
- 小汤学编程之JavaEE学习day09——Mybatis
一.Mybatis简介 1.官网 2.Mybatis是什么 3.有何作用 4.扩展:Hibernate 二.Maven介绍 1.导包 2.准备数据库和表.实体类 ...
- 小汤学编程之JavaEE学习day04——EL表达式、JSTL
一.EL表达式 1.EL表达式简介 2.禁用EL 3.EL中的11个隐式对象 4.EL表达式的作用 二.JSTL 1.引入步骤 2.通用标签 3.条件标签 ...
- 小汤学编程之JavaEE学习day03——JSP组成结构、JSP原理、JSP生命周期、JSP九大内置对象、四大作用域、JSP的MVC模式
一.JSP组成结构 二.JSP的原理 1.JSP的运行原理 2.分析JSP所生成的Servlet代码 3.JSP的执行过程 三.JSP生命周期 四.JSP九大内置对象 五.JSP四大作 ...
- 小汤学编程之JavaEE学习day02——Servlet使用步骤、生命周期、接收与返回数据、GET与POST、转发与重定向
一.Servlet使用步骤 二.Servlet生命周期 三.Servlet接收与返回数据 四.GET请求与POST请求的区别 五.转发与重定向 一.Servlet使用步骤 servlet是运行在服务器 ...
最新文章
- 46.一个例子了解C++中异常处理
- 类成员初始化顺序php,PHP-php类成员变量初始化的问题?
- MFC中访问界面控件的两种方法
- 不想当全栈的设计师不是_但我不想成为产品设计师
- 一场高质量的技术盛会怎样炼成?「2019中国大数据技术大会」即将来临,邀您共赴!...
- 【操作系统】大内核和微内核的比较
- python列表使用判断_浅谈Python数据类型判断及列表脚本操作
- 基于JAVA+SpringMVC+Mybatis+MYSQL的集市预约管理系统
- 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
- ES分布式架构及底层原理
- 云知声(Unisound)蜂鸟系列AI离线语音识别芯片方案介绍
- 华为手机Android studio 配置ADB wifi 调试
- [UOJ#405/LOJ#2863][IOI2018]组合动作(交互)
- 安卓开发 Fragment的简单使用与解析
- Vue中key属性的作用
- 51单片机课程设计《三路步进电机控制》
- 线程池作用及C语言实现
- POJ海贼王之伟大航路(dfs)
- NodeJS相关笔记(一)
- Qt+OpenCV联合开发(二十五)--直方图均衡化(equalizeHist)
热门文章
- Dubbo-admin的安装
- bzoj千题计划287:bzoj1228: [SDOI2009]ED
- C#反射设置属性值和获取属性值
- linux导出Excel The maximum column width for an individual cell is 255 characters
- silverlight 通过WCF与LinQ对数据库进行操作1
- AppLoader发布
- ACMMM 2021《LSG》性能SOTA!用GNN和GAN的方式来强化Video Captioning的学习!
- 火爆全网的《李焕英》通过 AI 还原“复活”了
- 摄像机域内监督行人重识别问题
- 【项目合作】移动端人体姿态估计