一、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的关系. 主要的是三种依赖关系。

  1. compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
  2. test:测试依赖范围。只对于测试classpath有效
  3. provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
  4. 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有三个生命周期:

  1. clean生命周期
  2. default生命周期
  3. 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相关推荐

  1. 小汤学编程之JavaEE学习day06——LayUI

    一.LayUI简介 1.下载     2.入门案例 二.栅格布局 三.图标 四.按钮 1.按钮类型     2.主题     3.尺寸     4.圆角     5.按钮组 五.后台布局 六.表格数据 ...

  2. 小汤学编程之JavaEE学习day07——版本控制工具:SVN、GIT

    一.SVN 1.SVN介绍     2.SVN安装     3.SVN操作 二.GIT 1.GIT介绍     2.集中式和分布式     3.GIT的基本使用     4.GIT时光机     5. ...

  3. 小汤学编程之JavaEE学习day05——会话管理、文件上传与下载、Ajax

    一.会话管理 1.HTTP协议     2.会话的概念     3.会话跟踪技术     4.会话跟踪技术分类(四种) 二.文件上传与下载 1.上传     2.下载     3.上传和下载合并优化成 ...

  4. 小汤学编程之JavaEE学习day01——HTTP简介、B/S与C/S应用、连接的建立与断开、Tomcat

    一.HTTP简介 1.HTTP请求报文     2.HTTP响应报文 二.B/S与C/S应用 三.连接的建立与断开 1.连接的建立(三次握手)     2.断开连接(四次挥手) 四.连接的建立与断开 ...

  5. 小汤学编程之JavaEE学习day10——Spring

    一.Spring简介 1.特点     2.核心特性     3.两大核心 二.Spring环境搭建 1.导包     2.准备数据库和表.实体类     3.定义dao层接口和接口映射文件      ...

  6. 小汤学编程之JavaEE学习day09——Mybatis

    一.Mybatis简介 1.官网     2.Mybatis是什么     3.有何作用     4.扩展:Hibernate 二.Maven介绍 1.导包     2.准备数据库和表.实体类    ...

  7. 小汤学编程之JavaEE学习day04——EL表达式、JSTL

    一.EL表达式 1.EL表达式简介     2.禁用EL     3.EL中的11个隐式对象     4.EL表达式的作用 二.JSTL 1.引入步骤     2.通用标签     3.条件标签    ...

  8. 小汤学编程之JavaEE学习day03——JSP组成结构、JSP原理、JSP生命周期、JSP九大内置对象、四大作用域、JSP的MVC模式

    一.JSP组成结构 二.JSP的原理 1.JSP的运行原理     2.分析JSP所生成的Servlet代码     3.JSP的执行过程 三.JSP生命周期 四.JSP九大内置对象 五.JSP四大作 ...

  9. 小汤学编程之JavaEE学习day02——Servlet使用步骤、生命周期、接收与返回数据、GET与POST、转发与重定向

    一.Servlet使用步骤 二.Servlet生命周期 三.Servlet接收与返回数据 四.GET请求与POST请求的区别 五.转发与重定向 一.Servlet使用步骤 servlet是运行在服务器 ...

最新文章

  1. 46.一个例子了解C++中异常处理
  2. 类成员初始化顺序php,PHP-php类成员变量初始化的问题?
  3. MFC中访问界面控件的两种方法
  4. 不想当全栈的设计师不是_但我不想成为产品设计师
  5. 一场高质量的技术盛会怎样炼成?「2019中国大数据技术大会」即将来临,邀您共赴!...
  6. 【操作系统】大内核和微内核的比较
  7. python列表使用判断_浅谈Python数据类型判断及列表脚本操作
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的集市预约管理系统
  9. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
  10. ES分布式架构及底层原理
  11. 云知声(Unisound)蜂鸟系列AI离线语音识别芯片方案介绍
  12. 华为手机Android studio 配置ADB wifi 调试
  13. [UOJ#405/LOJ#2863][IOI2018]组合动作(交互)
  14. 安卓开发 Fragment的简单使用与解析
  15. Vue中key属性的作用
  16. 51单片机课程设计《三路步进电机控制》
  17. 线程池作用及C语言实现
  18. POJ海贼王之伟大航路(dfs)
  19. NodeJS相关笔记(一)
  20. Qt+OpenCV联合开发(二十五)--直方图均衡化(equalizeHist)

热门文章

  1. Dubbo-admin的安装
  2. bzoj千题计划287:bzoj1228: [SDOI2009]ED
  3. C#反射设置属性值和获取属性值
  4. linux导出Excel The maximum column width for an individual cell is 255 characters
  5. silverlight 通过WCF与LinQ对数据库进行操作1
  6. AppLoader发布
  7. ACMMM 2021《LSG》性能SOTA!用GNN和GAN的方式来强化Video Captioning的学习!
  8. 火爆全网的《李焕英》通过 AI 还原“复活”了
  9. 摄像机域内监督行人重识别问题
  10. 【项目合作】移动端人体姿态估计