1.maven约定的目录结构, 约定是大家都遵循的一个规则。
每一个maven项目在磁盘中都是一个文件夹(项目-Hello)
-
Hello/ ---/src ------/main #放你主程序java代码和配置文件 ----------/java #你的程序包和包中的java文件 ----------/resources #你的java程序中要使用的配置文件 ------/test #放测试程序代码和文件的(可以没有) ----------/java #测试程序包和包中的java文件 ----------/resources #测试java程序中要使用的配置文件 ---/pom.xml #maven的核心文件(maven项目必须有)
一般情况下,我们习惯上采取的措施是:约定>配置>编码
maven的pom.xml记录的关于构建项目的各个方面的设置,maven从pom.xml文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目
2.疑问: 在pom.xml位置下执行mvn compile 编译src/main目录下的所有java文件的。
1)为什么要下载
maven工具执行的操作需要很多插件(java类–jar文件)完成的
2)下载什么东西了
jar文件–叫做插件–插件是完成某些功能
3)下载的东西存放到哪里了。
默认仓库(本机仓库):C:\Users\(登录操作系统的用户名)It.me.m2\repository
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter-2.0.9. pom
中央仓库的地址:https://repo.maven.apache.org :
执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录),
maven编译的java程序,最后的class文件都放在target目录中
运行:
设置本机存放资源的目录位置(设置本机仓库):
- 修改maven的配置文件, maven安装目录/conf/settings.xml 先备份 settings.xml
- 修改 指定你的目录(不要使用中文目录)
D:/JAVA/javasoft/maven_work/repository
3.仓库
1)仓库是什么
仓库是存放东西的, 存放maven使用的jar 和 我们项目使用的jar
- maven使用的插件(各种jar)
- 我项目使用的jar(第三方的工具)
2)仓库的分类
本地仓库, 就是你的个人计算机上的文件夹,存放各种jar
远程仓库, 在互联网上的,使用网络才能使用的仓库
- ①:中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库
中央仓库的地址: https://repo.maven.apache.org - ②:中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像。
- ③:私服,在公司内部,在局域网中使用的, 不是对外使用的。
3)仓库的使用,maven仓库的使用不需要人为参与。
开发人员需要使用mysql驱动—>maven首先查本地仓库—>私服—>镜像—>中央仓库
4.pom:项目对象模型,是一个pom.xml文件
1)坐标: 唯一值, 在互联网中唯一标识一个项目的
<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定版本号</version>
https://mvnrepository.com/ 搜索使用的中央仓库, 使用groupId 或者 artifactId作为搜索条件
2) packaging: 打包后压缩文件的扩展名,默认是jar ,web应用是war
packaging 可以不写, 默认是jar
3) 依赖
dependencies 和dependency ,相当于是 java代码中import你的项目中要使用的各种资源说明, 比如我的项目要使用mysql驱动
4)properties:设置属性
5)build : maven在进行项目的构建时, 配置信息,例如指定编译java代码使用的jdk的版本等
5.maven生命周期, maven的命令,maven的插件
1、maven的生命周期
就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署
2、maven的命令
maven独立使用,通过命令,完成maven的生命周期的执行。maven可以使用命令,完成项目的清理,编译,测试等等
- mvn clean 清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)
- mvn compile 编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
- mvn test-compile编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
- mvn test 测试(会生成一个目录surefire-reports,保存测试结果)
- mvn package 打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
- mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
- mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。 还会自动把项目部署到 web 容器中)。
注意:执行以上命令必须在命令行进入pom.xml所在目录
练习 maven 命令
1)单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。
junit测试的内容: 测试的是类中的方法, 每一个方法都是独立测试的。 方法是测试的基本单位(单元)。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。
2)使用步骤
- 1.加入依赖,在pom.xml加入单元测试依赖
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
- 2.在maven项目中的src/test/java目录下,创建测试程序。
推荐的创建类和方法的提示:
1.测试类的名称 是Test + 你要测试的类名
2.测试的方法名称 是:Test + 方法名称
例如你要测试HelloMaven ,
创建测试类 TestHelloMaven
@Test
public void testAdd(){
System.out.println("执行 HelloMaven 类 addNumber()方法");
int n1 = 10;
int n2 = 20;
int res = 0;
HelloMaven hello =new HelloMaven();
res = hello.addNumber(n1,n2);
// 期望值,实际值 Assert.assertEquals(30,res);
}
其中testAdd叫做测试方法,它的定义规则
- 1.方法是public的,必须的
- 2.方法没有返回值, 必须的
- 3.方法名称是自定义的,推荐是Test + 方法名称
- 4.在方法的上面加入 @Test
3)mvn compile
编译main/java/目录下的java 为class文件, 同时把class拷贝到 target/classes目录下面
把main/resources目录下的所有文件 都拷贝到target/classes目录下 - 5.执行先执行 mvn compile ,观察目录结构的变化,生成 target 目录
- 6.在执行 mvn clean, 观察 taget 目录被清除
- 7.执行 mvn compile
- 8.进入 taget/classes 目录执行 java com.bjpowernode.HelloMaven
- 9.进入 Hello 目录,执行 mvn test-compile 生成 test-target 测试编译后的目录
- 10.进入 Hello 目录,执行 mvn test 执行 MyTest 类中方法,生成测试报告
- 11.进入目录 surefire-reports,查看测试报告
- 13.进入 Hello 目录,执行 mvn test-compile
- 14.进入 Hello 目录,执行 mvn test
- 15.修改 testAddNumber2()方法中 60 为 50
- 16.进入 Hello 目录,执行 mvn package ,生成 xxx.jar 文件,这就是所说的打包
- 17.进入 Hello 目录,执行 mvn install , 把 xxx.jar 文件安装到本地 maven 仓库,安装成功后查看仓库中的 jar 文 件
3、maven的插件
maven命令执行时,真正完成功能的是插件,插件就是一些jar文件, 一些类。