Maven学习笔记

博主 1139 2020-07-11

Maven自动化构建工具

第一章 Maven简介

1)传统开发项目的问题(没有使用项目管理工具)

  1. 很多模块,模块之间有关系,手工管理关系,十分繁琐
  2. 需要的jar包需要手工管理
  3. jar包的版本需要手工控制
  4. jar包之间的依赖需要手动配置

2)Maven解决的问题:

  1. 管理jar包
  2. 自动下载jar包和其文档,源代码
  3. 自动管理jar包依赖
  4. 管理jar包
  5. 自动编译
  6. 自动测试
  7. 打包
  8. 帮助部署项目

3)构建
项目的构建:构建是面向过程的,由一系列步骤组成,完成项目代码的编译,测试,运行,打包,部署等
Maven支持的构建包括有:

  1. 清理,把之前项目编译的文件删除,为新的编译代码做准备
  2. 编译,把源代码编译为执行代码.class文件(批量)
  3. 测试,maven可以执行测试程序代码,验证功能是否正确(批量)
  4. 报告,生成测试结果的文件,测试是否通过
  5. 打包,把项目所有的class文件,配置文件等所有资源放到一个压缩文件中,这个压缩文件就是项目的结果文件,通常普通的java程序都为jar文件,web应用,压缩文件扩展名是.war
  6. 安装,把打包的文件jar,war安装到本机仓库
  7. 部署,把程序安装好后可以运行

4)Maven核心概念

  1. POM:一个文件,名称是pom.xml,项目对象模型,Maven把一个项目当做一个模型使用,控制maven构建项目的过程,管理jar依赖等
  2. 约定的目录结果:Maven项目的目录和文件的位置都是规定的
  3. 坐标:是一个唯一的字符串,用来表示自愿的
  4. 依赖管理:管理项目可以使用jar文件
  5. 仓库管理:资源存放的位置
  6. 生命周期:Maven工具构建项目的过程
  7. 插件和目标:执行Maven构建的时候用的工具是插件
  8. 继承
  9. 聚合

5)Maven工具的安装和配置
安装了Maven3.3.9

第二章 Maven的核心概念

1. Maven工程的目录结构

maven约定的目录结构,是一个大家都遵循的一个原则
每一个maven项目在磁盘中都是一个文件夹(以一个项目Hello为例)
Hello/
---/src
------/main #放置主程序java代码和配置文件
---------/java #放置程序包和包中的java文件
---------/resources #放置java程序中要使用的配置文件
------/test #放置测试用java代码和文件(可以没有)
---------/java #测试程序包和包中的java文件
---------/resources #放置测试用配置文件

---/pom.xml #Maven的核心文件(一个Maven项目必须有)

在项目的根目录Hello/下执行mvn compile编译,生成一个target文件夹,存放编译结果

2. pom文件

即Project Object Model项目对象模型,Maven把每个项目抽象成一个模型
1)坐标:在互联网中唯一标识一个项目
|基本信息| | |
|-------|-------|-------|
|modelVersion|Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0||
|groupId|组织id,一般是公司域名的缩写 eg:com.baidu,com.baidu.appolo|groupId,artifacId,version三个元素|
|artifacId|项目名称,也是模块名称,对应groupId中项目中的子项目||
|version|项目的版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT,verison使用三位数字标识,例如1.1.0|三个元素唯一标志一个项目,叫做坐标|
2)packaging:打包后压缩文件的扩展名,默认是jar,web应用是war
3)添加依赖

<dependencies>
	<dependecy>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.9</version>
	</dependecy>
</dependencies>

4)properties配置属性

5)build 构建项目时的配置信息,eg:指定编译java代码使用的jdk的版本

3. 仓库

仓库存放Maven本身使用的jar和我们项目需要使用的jar
仓库分类
1.本地仓库,就是个人计算机上的文件夹,存放jar
2.远程仓库,在互联网上的,使用网络才能使用的仓库
中央仓库,所有开发人员都共享使用的一个集中的仓库
中央仓库在各大洲重要城市都有镜像
仓库的使用:Maven仓库的使用不需要人为参与,由Maven自动完成

4. Maven的生命周期

对项目的构建是建立在生命周期模型上的,它明确定义项目生命周期各个阶段(清理 编译 测试 报告 打包 安装 部署),并且对于每一个阶段提供对应的命令,对开发者而言只需要掌握一些命令就可以完成项目各个阶段的构建工作。
Maven命令执行后,使用Maven的插件完成工作

单元测试

5. Maven的常用命令

  1. clean命令
    清理,会删除原来编译和测试的目录

  2. compile命令
    编译main/java/目录下的所有java文件为class文件,同时把class拷贝到target/classes目录下面
    把main/resources/目录下的所有文件,都拷贝到target/classes目录下

  3. test-compile命令
    编译测试文件,编译到test-classes文件里

  4. test命令
    编译测试程序

  5. package打包
    打包生成jar文件

  6. install安装
    把jar文件安装到仓库中

6. 插件

可以通过build控制配置,Maven构建项目的参数设置,可以用来进行设置jdk的版本等操作

7. 坐标

8. 依赖

第三章 Maven在IDEA中的应用

  1. IDEA中配置Maven
    IDEA中有默认的maven,需要用自己安装的Maven覆盖这个信息
    找到设置中的Maven
2. 使用模板创建项目 创建普通的Java项目的模板 ![image.png](https://www.wuminggao.cn/upload/2020/07/image-eb53be3e7d62451caf5494608e1472ec.png) 创建Web工程的模板 ![image.png](https://www.wuminggao.cn/upload/2020/07/image-dfffee340b1d4ba69cfdcb29e0190fdf.png)

第四章 依赖管理

依赖的范围
表示在Maven生命周期的哪些阶段起作用(编译 测试 打包 安装 部署)
compile(默认):在上述所有阶段都起作用
test:测试时才有用
provided:在编译,测试的时候需要,在打包安装部署等其他阶段不需要
<scope>provided</scope>来表示

第五章 Maven常用设置

  1. 全局变量
  2. Maven的属性设置
    使用properties配置
    例如
  <properties>
<!-- maven构建项目使用的编码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- maven编译项目使用的jdk-->
    <maven.compiler.source>1.8</maven.compiler.source>
<!-- 项目运行时使用的jdk-->
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

自定义全局变量:
<properties>中通过自定义标签声明变量(标签名就是变量名)
在pom.xml文件中的其他位置,使用${标签名}使用变量的值
自定义全局变量一般用来定义依赖的版本号,如果多个地方使用版本号相同,可以使用

<spring.version>5.2.5</spring.version>
  1. 资源插件
    image.png
    作用:
    默认没有使用resources的时候,Maven执行编译代码时,会把src/main/resources/目录中的文件拷贝到target/classes/下,对于src/main/java/目录下的非java文件不处理,不会拷贝到target/classes/下

如果我们需要把文件放在src/main/java/中,且执行的.class文件需要这些文件,name需要用resource配置这个需求。