目录
一、Maven的两种使用方式(详看第三章)
二、Maven的核心概念
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库管理
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合(详看第五章)
⑩常用设置
1)properties的配置
2)全局变量
3)使用资源插件
1)maven可以独立使用: 创建项目,编译代码,测试程序,打包,部署等等(要在pom文件目录下进行编译)
2)maven和idea一起使用:通过idea借助maven,实现编码,测试,打包等等
POM:Project Object Model 项目对象模型, maven把项目当做模型处理,即对模型的操作相当于对项目的操作,maven是通过pom.xml文件实现项目的构建和依赖的管理
4.0.0
maven项目使用的是大多人遵循的目录结构,即叫做约定的目录结构
mavenProject 项目文件夹
\src
\main 主程序目录(完成项目功能的代码和配置文件)
\java 源代码(包和相关的类定义)
\resources 配置文件
\test 测试程序目录(开发人员自己写的测试代码)
\java 测试代码(junit)
\resources 测试程序需要的配置文件
\pom.xml maven的核心配置文件
坐标三剑客:groupId、artifactId、version
坐标作用:
资源仓库: Maven Repository: Search/Browse/Explore (mvnrepository.com)
com.org
mavenProjectName
1.0-SNAPSHOT
jar
groupId: 组织名称。 公司,团体或者单位的标识,这个值常使用的公司域名的倒写。
例如:www.baidu.com, groupId: com.baidu
如果项目规模比较大, 也可以是 域名倒写+大项目名称。
例如: www.baidu.com , 无人车: com.baidu.appollo
artifactId:项目名称。 如果groupId中有项目,此时当前的值就是子项目名。 项目名称是唯一的。
version:项目的版本号,三位数字组成。 如 主版本号.次版本号.小版本号, 如:5.2.4
注意:版本号中有-SNAPSHOT, 表示快照,不是稳定的版本。
packaging 项目打包的类型。 有jar ,war, ear, pom等等(默认是jar)
依赖:项目中要使用的其他资源
maven在pom.xml文件中通过使用dependency和gav来表示依赖、管理依赖
maven使用gav作为标识,从互联网下载所需要的资源,并由maven管理项目所依赖的资源
依赖范围:使用scope表示依赖的范围
依赖范围表示: 这个依赖在项目构建的哪个阶段起作用
依赖范围scope :
mysql
mysql-connector-java
5.1.16
compile
maven仓库存放:
maven工具自己的jar包
第三方的其他jar, 比如项目中要使用mysql驱动
自己写的程序可以打包为jar ,并存放到仓库
仓库的分类:
本地仓库(本机仓库): 位于你自己的计算机, 它是磁盘中的某个目录。
本地仓库:默认路径,是你登录操作系统的账号的目录中/.m2/repository
修改本地仓库的位置:修改maven工具的配置文件(maven的安装路径\conf\setting.xml)
步骤:
1)创建一个目录,作为仓库使用。 目录不要有中文和空格,目录不要太深。
例如: D:\myRepository
2)修改setting.xml文件,指定 D:\myRepository这个目录
D:/myRepository
远程仓库: 需要通过联网访问的
1)中央仓库: 一个ftp服务器, 存放了所有的资源。
2)中央仓库的镜像: 就是中央仓库的拷贝。 在各大主要城市都有镜像。
3)私服:在局域网中使用的。 私服就是自己的仓库服务器。 在公司内部使用的。
maven使用仓库: maven自动使用仓库, 当项目启动后, 执行了maven的命令, maven首先访问的是本地仓库, 从仓库中获取所需的jar, 如果本地仓库没有 ,需要访问私服或者中央仓库或者镜像。
maven的生命周期: 即项目构建的各个环节。 包括 清理, 编译, 测试,报告,打包,安装,部署
单元测试(junit):
junit是一个单元测试的工具, 在java中经常使用。
使用单元测试:
1)加入junit的依赖(一些类和方法)
junit
junit
4.12
test
2)在src/test/java 目录中创建测试类文件、 写测试代码
单元测试使用的建议:
4.测试类中的方法可以单独执行,测试类也可以单独执行
5.在方法的上面加入@Test
package com.org;
// 导包
import org.junit.Assert;
import org.junit.Test;
public class TestHelloMaven{
// 定义多个测试方法,每个测试方法都是独立的
@Test
public void TestaddNumber1(){
System.out.println("测试方法1......");
HelloMaven hm = new HelloMaven();
int res = hm.addNumber(10,40);
// 把计算结果交给junit判断
// Assert.assertEquals(期望值,实际值);
Assert.assertEquals(50,res);
}
@Test
public void TestaddNumber2(){
System.out.println("测试方法2......");
HelloMaven hm = new HelloMaven();
int res = hm.addNumber(20,40);
// 把计算结果交给junit判断
// Assert.assertEquals(期望值,实际值);
Assert.assertEquals(50,res);
}
}
插件:要完成构建项目的各个阶段,要使用maven的命令, 执行命令的功能是通过插件完成的,插件就是jar,一些类。
命令: 执行maven功能是由命令发出的。 比如 mvn compile
命令:
1) mvn clean: 清理命令,
作用:删除以前生成的数据, 删除生成的target目录。
插件: maven-clean-plugin , 版本是 2.5
2)mvn compile:编译命令,执行的代码编译
作用:把src/main/java目录中的java代码编译为class文件,同时把class文件拷贝到 target/classes目录。 这个classes目录是存放类文件的根目录(也叫做类路径,classpath)
插件:
- maven-compiler-plugin 版本3.1。 编译代码的插件
- maven-resources-plugin 版本2.6 。 资源插件
- 作用:把src/main/resources目录中的文件拷贝target/classes目录中
3)mvn test-compile: 编译命令(编译src/test/java目录中的源文件),
作用:把生成的class拷贝到target/test-classes目录,同时把src/test/resources目录中的文件 拷贝到 test-clasess目录
插件:
- maven-compiler-plugin 版本3.1。 编译代码的插件
- maven-resources-plugin 版本2.6 。 资源插件
4)mvn test:测试命令
作用:执行 test-classes目录的程序, 测试src/main/java目录中的主程序代码是否符合要求
插件: maven-surefire-plugin 版本 2.12.4
5)mvn package:打包
作用:把项目中的class文件和配置文件都放到一个压缩文件中, 默认压缩文件是jar类型 的,web应用是war类型
插件:maven-jar-plugin 版本 2.4。 执行打包处理。
- 生成一个jar扩展的文件, 放在target目录下
- 打包的文件包含的是 src/main目录中的所有的生成的class和配置文件,和test无关
- 生成的是HelloMaven-1.0-SNAPSHOT.jar
com.org HelloMaven 1.0-SNAPSHOT jar 打包的文件名: artifactId-version.packaging
6)mvn install : 把生成的打包文件 ,安装到maven仓库(本地仓库)
插件: maven-install-plugin 版本 2.4
查看打包的文件:
com.org HelloMaven 1.0-SNAPSHOT jar groupId中的值:如果有 "." ,说明前后都是独立的文件夹。 com\org artifactId: 独立的文件夹 version:独立的文件夹
自定义配置插件:
在pom.xml文件中的build标签中设置插件
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8 源码编译 jdk 版本
1.8 运行代码的 jdk 版本
UTF-8 项目构建使用的编码,避免中文乱码
UTF-8 生成报告的编码
在properties定义标签,这个标签就是一个变量, 标签的文本就是变量的值
使用全局变量表示多个依赖使用的版本号
使用步骤:
1.在properties标签中,定义一个标签,指定版本的值
UTF-8
1.8
1.8
5.2.5.RELEASE
4.11
2.使用全局变量, 语法: ${变量名}
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
处理的配置文件的信息, maven默认处理配置文件
①:maven会把src/main/resources目录中的文件, 拷贝到target/classes目录下
②:maven只处理src/main/java目录中的 .java文件,把这些java文件编译为class,拷贝到 target/classes目录中。 不处理其他文件
src/main/java
**/*.properties
**/*.xml
false