Maven
Maven简介
传统开发项目的问题
很多模块与模块之有关系,手工管理关系,比较繁琐。
需要很多第三方功能,需要很多jar文件,需要手工从网络中获取各个jar
需要管理jar的版本。
管理jar文件之间的依赖,如果项目要使用a.jar ,则需要b.jar里面的类。必须首先获取到b.jar才可以,然后才能使用a.jar。
a.jar需要b.jar这个关系叫做依赖,或者你的项目中要使用mysql的驱动,也可以叫做项目依赖mysql驱动。
如果这样开发就会变得很繁琐,准备工作也要做很久。
maven的用处
- maven可以管理jar文件
- 自动下载jar和它的文档,源代码
- 管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar
- 管理你需要的jar版本。
- 帮你编译程序,把java编译成class
- 帮你测试你的代码是否正确
- 帮你打包文件,形成jar文件或者war文件。
- 帮你部署项目。
构建项目
构建是面向过程的,步骤:项目代码的编译,测试,运行,打包,部署等等。maven支持的构建包括:
- 清理:把之前项目编译的东西删除掉,为新编译代码做准备。
- 编译:把程序源代码编译为可执行代码,java文件==>class文件,批量的把java文件编译成class文件。
- 测试:maven可以执行测试程序代码,验证你的功能是否正确。批量的执行多个测试代码,同时测试很多功能。
- 报告:生成测试结果的文件,查看测试是否通过。
- 打包:把项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件,通常java程序,压缩文件都是jar为扩展名的。对于web应用,压缩文件扩展名是.war文件。
- 安装:把打包的文件按转到本机仓库。
- 部署:把程序安装好可以执行。
Maven核心概念
核心概念:
- POM:一个文件,名称是
pom.xml
,pom翻译过来叫做项目对象模型。 - 约定的目录结构: maven项目的目录和文件的位置都是规定的。
- 坐标: 是一个唯一的字符串,用来表示资源的。
- groupId:组织名
- artifactId:模块名
- version:版本号
- 依赖管理:管理项目使用的jar文件。
- 仓库管理:资源存放的位置。
- 生命周期: maven工具构建项目的过程。
- 插件和目标:执行maven构建时用的工具。
- 继承
- 聚合
maven工具安装和配置
在系统变量中配置:MAVEN_HONE = D:\maven\apache-maven-3.6.3
,在把MAVEN_HOME加入到path中:%MAVEN_HOME%\bin
即可。
在命令行输入mvn --version
查看是否配置成功。
Maven工程约定目录结构:
Hello:根目录,项目名称
main:放主程序java代码和配置文件
main/java:程序包和包中的java文件
main/resources:主程序的配置文件
test:放测试程序代码和文件的(可以没有)
test/java:测试程序包和包中的java文件
test/resources:测试java程序中要使用的配置文件
仓库
仓库分类:
- 本地仓库:存放jar包的文件夹
- 远程仓库:需要联网才能访问的仓库。
- 中央仓库:
https://repo.maven.apache.org
(共享) - 中央仓库镜像:即中央仓库的备份,在每个州都有,便于可以快速访问。
- 中央仓库:
设置本机仓库
- 修改maven配置文件
settings.xml
- 修改
<localReposity>
指定仓库目录
pom文件
项目对象模型,是一个pom.xml
文件。
坐标:唯一值
公司域名倒写 自定义项目名称(模块名称) 自定义版本号 packaging:
依赖:dependencies和dependency
mysql
mysql-connector-java
5.1.9
properties:设置属性。
build:maven在进行项目的构建时的相关配置信息,比如设置编译插件的jdk版本。
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所在目录
单元测试
junit
:专门的测试框架,测试的是类中的方法,每一个方法都是独立测试的,方法是测试的基本单位。
测试过程:
- 引入依赖
- 在src/test/java目录下,创建测试程序。类名格式:
Test+测试的类名
;方法名格式:Test+方法名称
。
1 | public void testAdd(){ |
Maven在Idea中的应用
Idea集成Maven
idea中已经设置了maven,但是我们一般不适用内置的,因为用内置修改maven的设置不方便,所以我们使用自己安装的maven去覆盖idea中默认的maven,让idea指定maven安装位置等信息。
第一步:
配置入口:file=>Settings
修改之后:
第二步:
如果下面那种不行,就用:-DarchetypeCatalog=internal
Idea创建Maven版java工程
第一步
第二步
第三步
第四步:创建resources文件
Idea创建Maven版Web工程
下面的步骤跟上面一样。
Idea导入Maven工程
第一步:
第二步:
第三步:
依赖范围
scope的值有三种:compile,test,provided。默认是compile。
scope表示依赖的范围,也就是在maven构建项目的那些阶段中起作用。
此处可以看到junit
的依赖范围是在测试阶段。
Maven常用设置
- maven的属性设置:
<properties>
标签用来设置maven的常用属性。 - maven的全局变量:
- 在
<properties>
通过自定义标签声明变量(标签名字就是变量名字) - 在
pom.xml
文件中的其他位置,使用${标签名}
的方式去引用变量的值
- 在
资源插件
1.maven 默认只把 src/main/resources 里面的.java 文件进行编译到 classes 中
2.如果希望 src/main/java 下的文件也被编辑到 classes 中,在 pom.xml 中配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
Author: 小灰灰
Link: http://xhh460.github.io/2021/01/11/Maven/
Copyright: All articles in this blog are licensed.