一、Maven 概述
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一 款在大型项目开发过程中不可或缺的重要工具。
Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;
Maven 提供规范的管理各个常用 jar 包及其各个版本,并且可以自动下载和引入项目中;
Maven 可以根据指定版本自动解决 jar 包版本兼容问题;
Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目
构建过程中的各个环节:清理、编译、测试、报告、打包、安装、部署
构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。 构建过程的几个主要环节
- 清理:删除以前的编译结果,为重新编译做好准备
- 编译:将Java源程序编译为字节码文件
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
- 报告:在每一次测试后以标准的格式记录和展示测试结果。
- 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应war包。
- 安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
- 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
1. Maven 核心概念
Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从 Maven的九个核心概念入手,
看看Maven是如何实现自动化构建的
POM 、约定的目录结构 、坐标 、依赖管理 、仓库管理 、生命周期 、插件和目标 、继承 、聚合
- POM : 一个文件 名称是pom.xml,pom翻译过来叫做项目对象模型,maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖。
- 约定的目录结构 : maven项目的目录和文件的位置都是规定的
- 坐标 : 是一个唯一的字符串,用来表示资源的
- 依赖管理 : 管理你的项目可以使用jar文件
- 仓库管理(了解) :你的资源存放的位置
- 生命周期 (了解) : maven工具构建项目的过程,就是生命周期
- 插件和目标(了解):执行maven构建的时候用的工具是插件
- 继承
- 聚合
2. 安装Maven环境
确保安装了java环境:maven本身就是java写的,所以要求必须安装JDK,java的环境变量得先配置好
1. 下载并解压maven安装程序
http://maven.apache.org/download.cgi
2. 配置Maven环境
在环境变量中:M2_HOME=Maven的目录 和在path中配置 %M2_HOME%/bin
3. 检验安装是否成功
3. Maven如何换资源存放位置
-
下载的东西存放到哪里:默认仓库(本机仓库):
C:\Users\(登录操作系统的用户名)Administrator.m2\repository -
执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录),
maven编译的java程序,最后的class文件都放在target目录中 -
设置本机存放资源的目录位置(设置本机仓库):
3. Maven如何换镜像
如果不换镜像速度会很慢,所以在安装完成之后就换默认的
maven安装目录/conf/settings.xml,先备份 settings.xml,以免出错,然后添加以下信息
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
二、Maven核心概念
1. 约定的目录结构(重点)
大家都遵循的一个规则,每一个maven项目在磁盘中都是一个文件夹(项目-Hello)
Hello/
---/src
------/main #放你主程序java代码和配置文件
----------/java #你的程序包和包中的java文件
----------/resources #你的java程序中要使用的配置文件
------/test #放测试程序代码和文件的(可以没有)
----------/java #测试程序包和包中的java文件
----------/resources #测试java程序中要使用的配置文件
---/pom.xml #maven的核心文件(maven项目必须有)
2. 仓库
1. 仓库是什么:
仓库是存放东西的, 存放maven使用的jar 和 我们项目使用的jar
maven使用的插件(各种jar)
我们项目使用的jar(第三方的工具)
2. 仓库的分类
- 本地仓库, 就是你的个人计算机上的文件夹,存放各种jar
- 远程仓库, 在互联网上的,使用网络才能使用的库
- 中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库,https://repo.maven.apache.org :中央仓库的地址
- 中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像。
- 私服,在公司内部,在局域网中使用的, 不是对外使用的
- 仓库的使用,maven仓库的使用不需要人为参与。
- 开发人员需要使用MysqL驱动--->maven首先查本地仓库--->私服--->镜像--->中央仓库
3. pom:项目对象模型(重点)
1. 坐标:唯一值, 在互联网中唯一标识一个项目的
需要特别注意的是,项目在仓库中的位置是由坐标来决定的:groupId、artifactId 和 version 决定项目在仓库中 的路径,artifactId 和 version 决定 jar 包的名称
<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定版本号</version>
https://mvnrepository.com/ 搜索使用的中央仓库, 使用groupId 或者 artifactId作为搜索条件
2. packaging:
打包后压缩文件的扩展名,默认是jar ,web应用是war ,packaging 可以不写, 默认是jar
3. 依赖
一个 Maven 项目正常运行需要其它项目的支持,Maven 会根据坐标自动到本地仓库中进行查找
dependencies 和dependency ,相当于是 java代码中import
你的项目中要使用的各种资源说明, 比我的项目要使用MysqL驱动
<dependencies>
<!--依赖 java代码中 import -->
<dependency>
<groupId>MysqL</groupId>
<artifactId>MysqL-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
log4j日志依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
junit单元测试依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
4. maven生命周期
maven的生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署
5. maven的命令
maven的命令:maven独立使用,通过命令,完成maven的生命周期的执行。
maven可以使用命令,完成项目的清理,编译,测试等等。当然了,现在这个阶段直接在IDEA中操作就行
Maven 提供一个项目构建的模型,把编译、测试、打包、部署等都对应成一个个的生命周期阶段,并对 每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。
- mvn clean 清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)
- mvn compile 编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
- mvntest-compile 编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
- mvn test 测试(会生成一个目录surefire-reports,保存测试结果)
- mvn package 打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
- mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
- mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。 还会自动把项目部署到 web 容器中)。
注意:执行以上命令必须在命令行进入pom.xml所在目录!