Maven详解
maven是一个项目的构建工具
一、maven作用:
1.管理依赖:jar包的下载,版本、管理
2.构建项目:完成项目代码的清理、编译,测试,打包,部署
二、maven的使用方式
1.独立使用maven:
使用maven的各种命令,完成代码的编译,测试,打包等。
2.结合开发工具使用
简单、快捷、不需要记命令
三、maven的安装
1.下载安装包:Maven官网
2.解压缩文件到一个非中文目录
3.配置环境变量,M2_HOME为 maven的安装目录
4.在path中加入%M2_HOME%bin
5.测试maven的安装,使用mvn -v查看maven的版本信息
四、maven的核心概念
1.约定的目录结构
项目文件夹下的src存放了main(主程序代码和配置文件)test(测试代码)
main文件下包含了java主程序和resource资源、配置
test文件下包含了java测试程序
五、如何修改Maven本地仓库
首先找到刚刚下载好的maven,依次根据以下路径找到Maven\apache-maven-3.8.1-bin\apache-maven-3.8.1\conf下面的settings.xml
然后在如图位置处加上
D:/developer_tools/Maven/apache-maven-3.8.1-bin/Workspace/repository
其中 中间所填写的便是你自己的本地仓库的位置。
1>Maven仓库是干什么的?
用来存放maven使用的jar包和项目使用的jar包。
2>仓库分类
>本地仓库 就是你个人计算机上的文件夹,存放各种jar
>远程仓库 在互联网上的,使用互联网下载才能使用的仓库
①中央仓库:最权威的,所有开放人员都共享使用的一个集中的仓库(https://repo.maven.apache.org)
②中央仓库的镜像,就是中央仓库的备份。
③私服,在公司内部,在局域网中使用的,不是对外使用的。
3>仓库的使用
maven仓库的使用不需要认为参与
开发人员如果需要使用某个驱动,首先查看本地仓库,如果本次仓库中没有此驱动,就会去私服仓库中查找,然后依次是中央仓库的镜像,最后是中央仓库中查找,而整个过程由maven自动操作
4>pom.xml文件
1)坐标,唯一值,在互联网中唯一标识一个项目的
<artifactId>自定义的项目名称</artifactId>
<groupId>公司域名的倒写</groupId>
<version>自定义版本号</version>
groupId 组织id,一般是公司域名的倒写+项目名。
artifactId 项目名称,也是模块名称,对应groupId中的项目中的子项目
version 项目的版本号,如果项目还在开发中,是不稳定的版本,通常在版本后带—SNAPSHOT,通过有三位数字标识,例如1.1.0
2)build:maven在进行项目的构建是,配置信息,例如指定编译java代码使用的jdk的版本信息
六、Maven的生命周期、命令、插件
maven的生命周期:就是maven构建项目的过程,清理,编译、测试、报告、打包、安装、部署
maven的命令:maven独立使用,通过命令完成maven的生命周期的执行,maven可以使用命令完成项目的清理、编译、测试等
maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件
七、依赖的范围
使用scope表示,scope的值有compile、test、provided。 默认是compile,在编译、测试、打包、部署阶段都有效
scope:表示依赖使用的范围,也就是在maven构建项目(清理,编译,测试,打包,安装,部署)的哪些阶段中起作用
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
此处的junit只在测试阶段才生效
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
此处的servlet依赖的范围时provided,在测试、编译阶段有效,当参与打包、部署时不需要,相应的服务器会提供相应的jar包
maven默认没有使用resources的时候,maven执行编译代码时,会把src/main/resources目录中的文件拷贝到target/classes目录中,对于src/main/java目录下的非java文件不处理,不拷贝到target/classes目录中
但是现在程序有需要把一些配置文件文件放在src/main/java目录中,在执行java程序时,要用到src/main/java目录中的文件,此时需要告诉maven在mvn compile src/main/java目录下的程序时,需要把src/main/java下的文件一同拷贝到target/classes目录中
此时就需要在中加入.
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>