Maven
呼~
一、概述
1. 概念
- Maven官网:
https://maven.apache.org
2. 功能
- maven可以管理jar文件
- 自动下载jar和它的文档,源代码
- 管理jar直接的依赖,自动下载其依赖
- 管理需要的jar版本
- 帮你编译程序,把java编译为class
- 帮你测试代码是否正确
- 帮你打包文件,形成jar文件,或者是war文件
- 帮你部署项目
3. 构建
- 构建:指项目的构建,面向过程的,就是一些步骤,完成需昂木代码的编译、测试、允许、打包、部署等
- 1)清理:把之前项目编译的东西删除,为新的编译代码做准备
- 2)编译:把程序源代码编译为执行代码,java-class文件。批量的,而命令javac只能编译一个文件
- 3)测试:maven可以执行测试程序代码。批量的,maven同时执行多个测试代码
- 4)报告:生成测试结果的文件,测试通过没有
- 5)打包:把项目中所有的class文件,配置文件等所有资源放在一个压缩文件中。
- 这个压缩文件就是项目的结果文件,通常java程序的压缩文件是jar扩展名,对于web应用,压缩文件以war为扩展名
- 6)安装:把(5)中生成的jar文件、war文件安装到本机仓库
- 7)部署:把程序安装好可以执行
4. 核心概念
- 1)POM:一个文件,名称是
pom.xml
。pom项目对象模型。- maven把一个项目当作一个模型使用,可以控制maven构建项目的过程,管理jar依赖
- 2)约定的目录结构:maven项目的目录和文件的位置都是规定的
- 3)坐标:是一个唯一的字符串,用来表示资源的
- 4)依赖管理:管理项目可以使用的jar文件
- 5)仓库的管理(了解):资源存放的位置
- 6)生命周期(了解):maven工具构建项目的过程
- 7)插件和目标(了解):执行maven构建时的工具是插件
- 8)继承
- 9)聚合
5. 安装配置
- 1)从maven官网下载安装包
3.3.9版本
使用广泛,配合jdk1.8使用- 历史版本下载:
https://archive.apache.org/dist/maven/maven-3/
- 2)解压
- bin目录:执行程序,主要是
mvn.cmd
- conf目录:maven工具本身的配置文件:
settings.xml
- bin目录:执行程序,主要是
- 3)配置环境变量(需要JAVA_HOME)
- 在系统环境变量中,指定一个
M2_HOME
的名称,指定maven安装目录,bin之前的目录 - 在把M2_HOME加入到path中,
%M2_HOME%\bin
- 在系统环境变量中,指定一个
- 4)验证:
mvn -v
- 5)修改资源(本地仓库)存放路径(默认C盘)
maven安装目录/conf/settings.xml
,修改<localRepository>
指定目录
二、核心概念
1. 约定目录
Hello/
---/src
------/main //主程序java代码和配置文件
---------/java //程序包和java文件
---------/resources //配置文件
------/test //测试文件
---------/java //测试文件
---------/resources //测试的配置文件
---/pom.xml //maven核心文件,maven项目必须有该文件
- 1)手动创建目录和java文件,在cmd中输入mvn compile编译src/main目录下的所有java文件
- 发现在下载东西
- maven工具执行的很多操作需要插件(java–jar文件)完成的
- 下载什么?
- jar文件,叫做插件,完成某些功能
- 下载到哪儿了?
- 默认仓库:
c:\Users\(登录操作系统的用户名)Administrator\.m2\repository
- 默认仓库:
- 执行命令后的结果:在项目根目录生成
target目录
,maven编译的java程序,最后的class文件都放在target目录
中
- 发现在下载东西
- 2)设置本机存放资源的目录
- 修改maven配置文件,
maven安装目录/conf/settings.xml
- 先备份settings.xml文件
- 修改
<localRepository>
指定目录
- 修改maven配置文件,
2. 仓库
- 1)仓库:存放maven使用的jar包和项目使用的jar包
- 2)仓库分类
- 本地仓库:个人计算机上的文件夹
- 远程仓库:互联网上,使用网络才能使用的仓库
- 中央仓库:最权威,所有开发人员都共享的一个集中仓库,
https://repo.maven.apache.org
- 中央仓库的镜像:中央仓库的备份,在各大州,重要城市都有镜像
- 私服:在公司内部局域网使用
- 中央仓库:最权威,所有开发人员都共享的一个集中仓库,
- 3)仓库的使用
- maven仓库的使用不需要人为干预
- 使用流程:maven首先查本地仓库 — 私服 — 镜像 — 中央仓库
3. pom文件
-
1)pom:项目对象模型,pom.xml
-
2)坐标:唯一值,在互联网中唯一标识的一个项目
-
<groupId>公司域名倒写</groupId> <artifactId>自定义项目名</artifactId> <version>自定义版本号</version>
-
-
3)
packaging
:打包后压缩文件的扩展名,默认为jar。web应为war -
4)依赖:
dependencies
、dependency
,项目中使用的各种资源说明 -
5)
properties
:设置属性 -
6)
build
:maven在进行项目的构建时,配置信息,例如,指定编译java代码使用的jdk版本-
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <!-- 插件名称 --> <artifactId>maven-compiler-plugin</artifactId> <!-- 插件版本 --> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 告诉maven,写代码实在jdk1.8上编译的 --> <target>1.8</target> <!-- 程序应该运行在1.8的jdk上 --> </configuration> </plugin> </plugins> </pluginManagement> </build>
-
4. 坐标(gav)
-
坐标:唯一值,在互联网中唯一标识的一个项目
-
<groupId>公司域名倒写</groupId> <artifactId>自定义项目名</artifactId> <version>自定义版本号</version>
-
5. 生命周期
- 就是maven构建项目的过程,清理、编译、测试、报告、打包、安装、部署
6. maven命令
maven命令:单独使用,可以通过maven命令完成maven生命周期的执行
插件:maven命令执行时,真正完成功能的是插件,就是一些jar文件
- 1)
mvn clean
:清理(会删除原来编译和测试的目录,即 target目录,但是已经install到仓库里的包不会删除) - 2)
mvn compile
:编译主程序(会在当前目录下生成一个target,里边存放编译主程序之后生成的字节码文件) - 3)
mvn test-compile
:编译测试程序(会在当前目录下生成一个target,里边存放编译测试程序之后生成的字节码文件) - 4)
mvn test
:测试(会生成一个目录surefire-reports,保存测试结果) - 5)
mvn package
:打包主程序(会编译、编译测试、测试、并且按照 pom.xml配置把主程序打包生成jar包或者war包) - 6)
mvn install
:安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中) - 7)
mvn deploy
:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到web容器中。)
三、生成目录target
- 1)在编译命令完成后,会在项目根目录创建一个target文件,该文件存放java文件的字节码文件和配置文件
- 2)
mvn compile
,编译main/java
目录下的java为class文件,并将class文件放入target/classes
目录- 还会把
main/resources
目录下的所有文件,都拷贝到target/classes
目录下
- 还会把
四、Maven在IDEA中使用
1. 简介
- 1)idea中设置了内置maven,一般不使用内置的。
- 2)使用自己安装的maven,需要覆盖idea中默认设置
2. idea配置
- 1)File — Settings(当前工程)/ Other Settings(以后工程),两个目录都需要设置
- 2)Build,Execution,Deployment — Builds Tools — Maven
- 该页面的三个值
Maven home directory
:maven安装目录User settings file
:maven安装目录 / conf / settings.xml文件Local repository
:本地仓库路径
- 该页面的三个值
- 3)Maven — Runner
- 该页面的值
- JRE:选择jdk版本
VM Options
:设置参数-DarchetypeCatalog=internal
,maven项目在创建时会联网下载模板文件,比较大,设置该参数就不用下载,创建maven项目快
- 该页面的值
3. 创建maven项目
- 1)创建普通java项目:创建项目时,选中
create from archetype
,选择maven-archetype-quickstart
, - 2)web项目:创建项目时,选中
create from archetype
,选择maven-archetype-webapp
4. 导入maven项目
- 进入工程结构
- 选择Modules — 点击+号 — import Module — 选择maven项目 — 选择
import module from external model
,在下面选择maven - 导入后,在工程结构中选择该项目的JDK版本:
Dependcies
—Module SDK
— ok
5. 使用技巧
① pom.xml文件导入依赖有红色波浪线
- 右键
pom.xml
文件,maven — Reimport - 或者右边maven栏的刷新
五、依赖管理
1. 简介
- 1)依赖范围:在
<dependice>
中的<scope>
子标签中定义。表示依赖在项目中哪些阶段有效(maven生命周期中) - 2)scope取值:
- compile:默认值。参与主程序、测试程序、打包、部署
- test:只对测试程序有效
- provided:提供者(别人有,我不用提供给别人)。只对主程序、测试程序有效
六、常用设置
1. 属性设置
<properties></properties>
设置常用属性
2. 全局变量
-
1)在
<properties></properties>
通过自定义标签声明变量(标签名就是变量名) -
2)在pom.xml文件中其他位置,使用
${标签名}
使用变量值 -
自定义全局变量一般是定义依赖的版本号,当项目中要使用多个相同的版本号,先使用全局变量,在使用${变量名}
3. 资源插件
① 简介
-
1)在
build标签
中定义,扫描不存放在resources目录下的配置文件-
<build> <resource> <directory>src/main/java</directory> <!--文件所在目录--> <!--包括目录下的properties和xml文件都会扫描到--> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!--false不启用过滤,因为*.properties已经起到过滤作用了--> <filtering>false</filtering> </resource> </build>
-
-
2)作用:mybatis中会用到
② 实际使用
- 1)默认没有使用该插件的时候,maven执行编译时,会把src / main / resource目录中的文件拷贝到 target / classes目录中。对于 src / main / java 目录下的非java文件,不拷贝到 target / classes 目录中。
- 2)当程序中有文件需要放在 src / main / java 目录中,当执行java程序时,需要用到它。就需要告诉maven在编译( mvn compile) src / main / java 目录下的程序时,需要把文件一同拷贝到 target / classes目录下。此时就需要在
<build>
中加入<resources>