Maven自动化构建工具
一、Maven简介
1、maven的主要功能:
1、改进项目的开发和管理
- maven可以管理jar包文件
- 自动下载jar和它的文档,源代码
- 管理jar包需要的依赖,a.jar需要b.jar,maven会自动下载b.jar
- 管理你需要的jar版本
- 帮你编译程序,把Java编译成class
- 帮你测试代码正不正确
- 帮你打包文件,形成jar文件,或者war文件
- 帮你部署项目
2、构建:项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等
maven支持的构建有:
- 清理:把之前项目编译的东西删除掉,为新的编译代码做准备。
- 编译:把程序源代码编译成执行代码,Java–class 文件,编译是批量的,可以把很多的文件编译成class文件,而javac一次只能编译一个文件。
- 测试:maven可以测试程序代码,验证你的功能是否正确,maven可以同时执行多个测试代码,同时测试很多功能。
- 报告:生成测试结果的文件,测试有没有通过。
- 打包:把你项目中所有的class文件,配置文件等所有的资源放进一个压缩文件中,这个压缩文件就是项目的结果文件。通常Java程序,压缩文件是jar扩展名的,对于web应用,压缩文件扩展名是.war
- 安装:把5中生成的jar文件,war安装到本机仓库
- 部署:把程序安装好可以执行
二、Maven的核心概念
- POM: 一个文件, 名称是pom.xml,翻译过来叫做项目对象模型。maven把项目当作一个模型使用,控制maven构建项目的过程,管理jar依赖
- 约定的目录结构: maven项目的目录和文件的位置都是规定的
- 坐标:是一个唯一的字符串,用来表示资源
- 依赖管理:管理你的项目可以使用jar文件
- 仓库管理(了解):你的资源存放的位置
- 生命周期(了解):maven工具构建项目的过程,就是生命周期
- 插件和目标(了解):执行maven构建时用的工具就是插件
- 继承
- 聚合
1、maven工程约定目录结构,约定是大家都遵循的一个规则。
每一个maven项目在磁盘中都是一个文件,(项目-Hello)
Hello/ # 根目录,也就是工程名
---/src # 源代码
------/main # 放你主程序Java代码和配置文件
---------/java # 你的程序包和包中的Java文件 (主程序的Java源码)
---------/resources #你的Java程序中要使用的配置文件 (主程序的配置文件)
------/test # 放测试程序代码和文件的
---------/java # 你的程序包和包中的Java文件
---------/resources #你的Java程序中要使用的配置文件
---/pom.xml # maven的核心文件(maven项目必须有)
2、mvn compile 编译 src/main目录下的所有Java文件的
- 为什么要下载 —> maven 工具执行的操作需要很多插件(Java类–jar文件)来完成的
- 下载什么东西了 —> jar文件–插件–插件是完成某些功能
- 下载的东西放哪里了 —> 默认仓库(本机仓库):C:\Users\13518.m2\repository
- 执行mvn compile,结果是在项目的根目录下生成target目录(结果目录),maven编译的Java程序,最后的class文件都在target目录中
3、仓库
(1)仓库是什么: 仓库是存放东西的,存放maven使用的jar 和我们使用的jar
- maven使用的插件(各种jar)
- 项目使用的jar(第三方工具)
(2) 仓库的分类
- 本地仓库,就是个人计算机上的文件夹,存放各种jar
- 远程仓库,在互联网上的,需要网络才能使用的仓库
1、中央仓库:最权威的,所有开发人员都共享使用的一个集中的仓库
http://repo.maven.apache.org :中央仓库的地址
2、中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都是镜像
3、私服:在公司内部, 在局域网中使用,不是对外使用的。
(3) 仓库的使用,maven仓库的使用不需要人为参与
开发人员需要使用mysql驱动---->maven首先查本地仓库 ---->私服---->镜像---->中央仓库
4、pom:项目对象模型,是一个pom.xml 文件
- 坐标:唯一值,在互联网中唯一标识一个项目的
公司域名的倒写
自定义项目名称
自定义版本号
https://mvnrepository.com/: 搜索使用的中央仓库使用groupId或artifactId作为搜索条件
-
packaging:打包后的压缩文件的扩展名,默认是jar,web应用是war
packaging 可以不写,默认是jar -
依赖
depandencies 和 depandecy
你的项目中要使用的各种资源说明,比如我的项目要使用mysql驱动
<depandencies>
<!--依赖 在Java代码中 import -->
<depandecy>
<groupId>mysql</groupId>
<artifactId> mysql-connector-java</artifactId>
<version> 5.1.9</version>
</depandecy>
</depandencies>
- properties :设置属性
- build : maven在进行项目的构建时,配置信息,例如指定编译Java代码使用的jdk的版本等等。
5、maven的生命周期,maven的命令,maven的插件
- maven的生命周期:就是maven构建项目的过程:清理,编译,测试,报告,打包,安装,部署
- maven的命令:maven独立使用,通过命令,完成maven的生命周期的执行。maven可以使用命令,完成项目的清理,编译,测试等。
- maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类
(1)单元测试(测试方法):用的是junit,junit是一个专门测试的框架(工具)。
junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的。方法是测试的基本单位。(单元)
maven借助单元测试,批量的测试你类中的方法是否符合预期的。
(2)使用步骤
- 加入依赖,在pom.xml中加入单元测试依赖
<!-- 单元测试-->
<depandencies>
<depandecy>
<groupId>junit</groupId>
<artifactId> junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</depandecy>
</depandencies>
- 在maven项目的/src/test/java目录下,创建测试程序
推荐的创建类和方法的提示:
1.测试类的名称 是Test + 你要测试的类名
2.测试的方法名称 是:Test + 方法名称
- mvn compile
编译main/java/目录下的java为class文件,同时把class拷贝到target/calsses目录下面
把main/resources目录下的所有文件 都拷贝到target/class 目录下
用 mvn test-compile 命令把测试文件中的Java文件编译成class文件,并测试方法是否成功
三、Maven在IDEA的应用
1、在idea中配置maven
2、使用模板创建项目
- maven-archetype-quickstart:普通的Java项目
- maven-archetype-webapp:web工程
四、依赖管理
1、依赖的范围:使用scope表示
scope 的值有 compile test,provide ,默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目中的那些阶段起作用。
maven构建项目 清理,编译,测试,打包,安装,部署 过程(阶段)
junit 依赖的范围是 test (只在测试阶段起作用)
<depandecy>
<groupId>junit</groupId>
<artifactId> junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</depandecy>
依赖范围:
- compile:默认,在构造的编译,测试,打包,部署需要
- test:只在测试阶段需要
- provided:在部署时,有服务器提供,项目本身不需要自带
五、Maven常用设置
maven常用操作
1、 . maven的属性设置
<properties>设置maven的常用属性
2. maven的全局变量
自定义属性:1.在 <properties>里自定义标签声明变量,(标签名就是变量名)
自定义全局变量一般是定义 -----依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量,再使用 ${变量名}
3. 资源插件
<build>
</resources>
<resource>
<directory>src/main/resources</directory> <!- 所在的目录 ->
<includes> <!- 包括目录下的.properties , .xml文件都会扫描到->
<include>** /.properties</include>
<include>**/ .xml</include>
</includes>
<!- 选项false不启用过滤器,*.properties 已经起到过滤作用->
<filtering>false</filtering>
</resource>
</resources>
</build>
作用:mybatis课程中会用到这个作用
- 默认没有使用resources的时候,maven编译代码时,会把src/main/resource目录中的文件拷贝到target/classes目录中。对于src/main/java目录下的非Java文件不处理,不拷贝到target/classes目录
- 我们的程序有需要把一些文件放在src/main/java 目录中,当我执行Java程序时,需要用到src/main/java目录中的文件,需要告诉maven在 mvn compile src/ main/classes 目录下的文件时,需要把一些文件一同拷贝到target/classes目录中,此时需要在中加入