功能
- maven可以管理jar文件
- 自动下载jar和jar的文档,源代码
- 管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar
- 管理你需要的jar版本
- 帮你编译程序,把java编译为class
- 帮你测试你的代码是否正确
- 帮你打包文件,形成jar文件,或者war文件
- 帮你部署项目
构建:项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试、运行、打包、部署等等。maven支持的构建包括有:
- 清理,把之前的项目编译的东西删除掉,我新的编译代码做准备。
- 编译,把程序源代码编译为可以执行的代码,java-class文件,批量的,maven可以同时把成千上百的文件编译为class.javac不一样,javac一次只能编译一个文件。
- 测试,maven可以执行测试程序代码,验证你的功能是否正确。批量的,maven同时执行多个测试代码,同时测试很多的功能。
- 报告,生成测试的结果文件,测试通过没有。
- 打包,把你的项目中所有的class文件,配置文件等所有资源放在一个压缩文件中。这个压缩文件就是项目的结果文件,通常java程序,压缩文件是jar扩展名的。对于web应用,压缩文件是.war
- 安装,把5中生成的文件jar,war安装到本机仓库。
- 部署,把程序安装好可以执行。
核心概念
- POM:一个文件 名称是pom.xml,pom翻译过来叫做项目对象模型,maven把一个项目当作一个模型来使用,控制maven构建项目的过程,管理jar依赖。
- 约定的目录结构: maven项目的目录结构和文件位置都是有规定的。
- 坐标: 是一个唯一的字符串,用来表示资源的
- 依赖管理:管理和你的项目可以使用jar文件
- 仓库管理(了解):你的资源存放的位置
- 生命周期(了解):maven工具构建项目的过程,就是生命周期。
- 插件和目标(了解):执行maven构建的时候用的工具是插件。目标就是想干什么。
- 继承(待定):
- 聚合(待定):
安装和配置
前提:需要Java环境
- 下载maven
- 解压安装包
- 设置环境变量
- 验证安装是否成功 mvn -v
目录结构(类似于SpringBoot的目录结构)
每一个maven项目在磁盘中都是一个文件夹(项目Hello)
Hello/
-----/src
-----/main #放的你的主程序的java代码和配置文件都放在main文件中
-----/java #你的程序的包和包中程序的java文件
-----/resources #你的java程序中使用的配置文件
-----/test #放测试程序代码和文件的(可以没有)
-----/java #你的程序的包和包中程序的java文件
-----/resources #你的java程序中使用的配置文件
-----/pom.xml #maven的核心文件(maven项目必须有)
疑问 mvn compile 编译src/main目录下的所有java文件的。
1、为什么要下
maven工具执行的操作需要很多的插件(java类—jar文件)完成的
2、下载什么东西
jar文件—叫做插件—插件是完成某些功能的
3、下载的东西存放在哪里了
默认仓库:在C 用户下的admin下的.m2中有一个仓库地址
执行结果:
执行mvn compile,结果是在项目目录下生成target目录(结果目录),maven编译的java程序,最后的class文件都放在target目录中
设置本机存放资源的目录位置
配置本地仓库
- 修改maven的配置文件,maven安装目录下的/conf/setting.xml
- 先备份setting.xml
- 修改localRepository来指定你的目录(不要使用中文目录)
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D://Java//repository</localRepository>
<!-- interactiveMode
| This will determine whether maven prompts you when it needs input. If set to false,
| maven will use a sensible default value, perhaps based on some other setting, for
| the parameter in question.
|
| Default: true
<interactiveMode>true</interactiveMode>
-->
仓库
仓库是什么
- 存放maven使用的jar包/插件
- 项目使用的jar(第三方的工具jar)
仓库的分类
- 本地仓库:个人计算机上的一个文件夹,存放各种jar包
- 远程仓库:在互联网上的,使用网络才能使用的仓库
- 中央仓库:最权威的,所有的开发人员共享使用的集中的仓库:https://repo.maven.apache.org
- 中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都有镜像。
- 私服,在公司的内部局域网中使用的,不是对外使用的。
POM项目对象模型
搜索使用中央仓库:www.mvnrepository.com
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>//maven的项目版本
//项目的坐标:唯一的标识一个项目:可以在互联网上找到本项目
<groupId>com.example</groupId> //一般为公司名:公司域名的倒写 com.baidu.appolo
<artifactId>demo1</artifactId> //项目的名称:自定义的
<version>0.0.1-SNAPSHOT</version> //项目的版本号:自定义的版本号
<packaging>jar</packaging> //打包后项目压缩文件的扩展名 默认为jar web为war,可以不写。
//配置的属性
<properties>
<java.version>1.8</java.version> //jdk的版本
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
//项目中的依赖管理
<dependencies>
//具体的依赖
<dependency>
//依赖的坐标
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
//单元测试的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build></build> //maven在进行项目构建的配置信息,比如jdk的版本等
<parent></parent> //继承
<modules></modules> //聚合
</project>
生命周期:编译、打包等过程
- 生命周期由命令完成,maven执行时,真正完成功能就是插件,jar文件(一些类) 命令通过插件完成。
命令
- mvn clean:清理之前编译过的文件
- mvn compile:编译主程序
- 编译main/java目录下的java为class文件,同时把class拷贝到target/classes目录下
- 把main/resouces目录下的所有文件都拷贝到target/classes目录下
- 到这里不能保证代码正确
- mvn test-compile:编译测试程序、
- mvn test:测试
- mvn package:打包主程序
- mvn install:安装主程序
- mvn deploy:部署主程序
单元测试: 用的是junit,junit是一个专门测试的框架(工具)
测试的内容:测试的是类中的方法,每一个方法都是独立测试的。方法是测试的基本单位。
maven是借助单元测试来批量测试类中的大量方法是否是符合预期的。
-
加入依赖,在pom.xml中加入单元测试的依赖
-
在maven项目中src/test/java目录下,创建测试程序
-
推荐的创建类和方法的提示:
- 测试类的名称,是Test+你要测试的类名
- 测试的方法名称,是 Test+方法名称
例如:测试HelloMaven创建测试类 TestHelloMaven
@Test public void testAdd(){ 测试HelloMaven的Add方法是否正确 } 其中testAdd叫做测试方法,他的定义规则 1.方法是public的,必须的 2.方法没有返回值,必须的 3.方法的名称是自定义的,推荐Test+方法名称 4.在方法上加上@Test注解