Maven
是一个项目的构建工具
maven的核心概念
POM:
一个文件,名称为pom.xml,pom翻译过来叫做项目对象模型,maven把一个项目当作一个模型使用。控制maven构建项目的构成,管理jar依赖。
约定的目录结构:
maven项目的目录和文件位置都是规定的。
坐标:
是一个唯一的字符串,用来表示资源的
依赖管理:
管理你的项目可以使用的jar文件
仓库管理(了解): 你的资源存放的位置
生命周期(了解): maven工具构建项目的过程,就是生命周期
插件和目标(了解): 执行maven创建的时候用的工具是插件
继承
聚合
Maven工程约定目录结构
约定是大家都遵循的一个规则
每个Maven项目在磁盘中都是一个文件夹(项目 -Hello)
Hello/
—/src
------/main (放主程序java代码和配置文件)
---------/java (程序包和包中的java文件)
---------/resources (java程序中要使用的配置文件)
------/text (放测试程序代码和文件,可没有)
---------/java (测试程序包和包中的java文件)
---------/resources (测试java程序中要使用的配置文件)
—/pom.xml (maven的核心文件,必须有)
执行mvn compile,结果是在项目的根目录下生成target目录(结果目录),maven编译的java程序,最后的class文件都放在target目录中。
疑问:
mvn compile 编译src/main目录下的java文件时下载了什么?
maven工具执行的操作需要很多插件(java类–jar文件)完成的,默认放到了C盘中的用户下。
设置本机存放资源的目录位置(本机仓库)
- 修改maven的配置文件setting.xml(先备份)
- 修改localRepository来指定目录,如
<localRepository>D:/ProgramFile/Maven/maven_repository</localRepository>
仓库
是存放东西的,存放maven使用的jar和我们项目使用的far
仓库的分类
- 本地仓库,个人计算机上的文件夹,存放各种jar
- 远程仓库,在互联网上的,使用网络才能使用的仓库
- 中央仓库:最权威的,所有的开发人员都共享使用的一个集中的仓库。
- 中央仓库的镜像:就是中央仓库的备份,在各大州,重要的城市都是镜像。
- 私服:在公司内部,在局域网中使用的,不是对外使用的
仓库的使用
maven仓库的使用不需要人为参与
maven首先查本地仓库–>私服–>镜像–>中央仓库
POM
Project Object Model 项目对象模型
坐标(gav):
由groupId 公司域名的倒写、artifactId自定义项目名称、version 自定义版本号
packaging: 打包后呀所以文件扩展名,默认是jar,web应用的是war
依赖:
dependencies和dependency
项目中要使用的各种资源的说明
properties: 设置属性
build: maven在进行项目的构建时,配置信息,例如指定编译java代码使用的jdk的盘本
maven的生命周期,命令,插件
生命周期: 就是maven构建项目的过程:清理、编译、测试、报告、打包、安装、部署
命令: 通过命令:完成maven声明周期的执行
- mvn clean 清理
- mvn compile 编译主程序
- mvn test-compile 编译测试程序
- mvn test 测试
- mvn package 打包主程序
- mvn install 安装主程序
- mvn deploy 部署主程序
插件: 命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类
测试:
maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。
使用步骤
- 加入依赖,在pom.xml加入单元测试依赖
- 在maven项目中的src/test/java目录下,创建测试程序
- 推荐的创建类和方法的提示:
- 测试类名:Test+要测试的类名
- 测试的方法名:test+方法名
依赖范围:
使用scope表示,默认为compile
- compile 从编译到部署
- test 只在测试阶段
- provided 从编译到测试,打包部署则不参与
Maven常用操作
maven的属性设置
<properties>
设置maven的常用属性
maven的全局变量
自定义的属性
- 在
<properties>
通过自定义标签声明变量(标签名就是变量名) - 在pom.xml文件中的其他位置,使用${标签名}使用变量的值
自定义全局变量一般定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,再使用${变量名}