Maven
maven简介
官网:http://maven/apache/org/
1:概念
是一个软件(特别是Java软件)项目管理及自动构建工具,基于项目对象模型,简单来说‘
我们做一个 Java 项目,需要第三方依赖包要怎么办呢,将别人打好的 Jar 包下载到本地,然后手动指定给项目。操作麻烦,比如版本控制,需要新版本怎么办,重新下载,重新指定。而用了 Maven 之后,需要什么包,直接在 pom.xml 中添加几行 xml 代码,指定包名、版本等,就可以了
2:maven的构建(从源码到成品的整个过程)
maven对构建(build)的过程进行了抽象和定义,这个过程被称为构建的生命周期(lifecycle)。
构建是面向过程的,就是一些步骤,完成项目代码的校验-初始化-编译-测试-打包-集成测试-安装-部署
maven支持的构建有
1:校验:检验maven的配置是否生效或正确
2:初始化:初始化数据
3:clean(清理),把之前项目编译的代码都删掉,为新的编译代码做准备
4:编译:把源代码变成成可执行文件 Java–class,这个是批量的,可以同时把成千上百个文件编
译成class文件,和javac不一样,javac是编译一个文件
5:测试:maven可以执行测试程序代码,验证你的功能是否正确,批量的
6:打包:把你项目中的所有的class文件,配置文件等所有资源放到一个压缩文件中,这个压缩文件就是项目的结果文件,通常Java程序,压缩文件是jar扩展名,web项目扩展名是war
7:安装:把6中生成的文件jar,war安装到本地仓库
8:部署:把项目发布到服务器上
3:maven能做什么
1):maven可以管理jar包
2):自动下载jar和它的文档,源代码
3):管理jar直接的依赖 a.jar需要b.jar maven会自动下载b.jar
4):管理jar需要的版本
5):帮你编译程序,把java编译成class
6) :帮你测试你的代码是否正确
7):帮你打包文件,形成jar文件或者war文件
7):帮你部署项目
4:maven工具的的安装和配置
4.1):需要从maven官网下载maven的安装包
进入Maven官网的下载页面:http://maven.apache.org/download.cgi
然后下载后解压一个你的电脑目录
解压后的maven目录,图中箭头localRepository是我自己建的本地仓库
bin目录下的mvn.cmd:一个maven命令,能够执行maven的构建项目
conf目录下settings.xml是maven这个工具的配置文件
4.2:配置环境变量
在系统的环境变量中,指定一个M2-HOME的名称,指定的是maven的工具的安装目录
PATH配置
然后可以安装目录下bin打开cmd命令,输入mvn -v
出现这个命令,就说明你的maven配置正确
5:Maven核心概念
1):pom:一个文件,名称是pom.xml pom翻译过来过来就是项目对象模型
maven把一个项目当成一个模型来使用,控制maven构建项目的过程,管理jar依赖
2):约定的目录结构,maven的项目的目录和文件的位置都是有规定,
3):坐标:唯一的一个字符串标识,标识资源的
4):依赖管理:管理你的项目可以使用的jar文件
5):仓库管理:你的资源存放的位置
6):生命周期:我们maven工具构建项目的过程
1.1:pom(project Object Model)项目对象模型,maven把一个项目的结构和内容抽象成一个模型
在xml文件中声明
modelVersion:maven模型的版本,4.0.0
groupId:组织id,一般是公司域名的倒写
artifactId:项目名称
version:项目的版本号
说明:这三个斜体加一起来就是一个坐标
packaging:maven项目的打包方式。默认jar
dependenciesh和dependency:项目中要使用的各种资源说明
比如我的项目要使用spring
<!--spring依赖-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
groupId,artifactId,version对应的都是仓库的文件夹
properties:设置属性
build:构建项目时,配置信息,例如指定编译Java的jdk版本
plugins:插件
2.1:Maven工程约定的目录结构约定是大家都遵循的一个规则
maven中约定的目录结构
Hello # 根目录,也就是工程名
|----src #
|-----|----main #放的你主程序的Java代码和配置文件
|-----|------|-----java # 你的程序包和包中的Java文件
|-----|------|-----resources #你的Java程序中要用的资源文件
|-----|----test #放测试程序用的代码和文件(可以没有)
|-----|-----|-----java #放测试程序包和包中的Java文件
|-----|------|-----resources #测试程序中要用的资源文件
|----pom.xml #maven的核心文件(maven项目中必须有)
4.1依赖范围使用scopa表示
scopa的值有compile、test、provided、runtime、system
scopa表示依赖的范围,也就是maven在构建项目的哪些阶段中起作用
compile:表示编译范围,指A在编译时依赖B,该范围为默认依赖范围。编译范围的依赖会用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包。
provide:provide依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。例如:servlet api被Tomcat容器提供了。
runtime:runtime依赖在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包。
test:test范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。例如:Junit。由于运行时不需要,所以test范围依赖不会被打包。
system:system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。一般不推荐使用
5.1:Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源,Maven仓库能帮助我们管理构件
maven的中央仓库
https://mvnrepository.com
配置maven私服镜像地址:
在国内,由于你懂得的原因,所以说我们不能够直接的访问默认的中央仓库地址,所以说为了方便起见,我们一般使用的是maven的镜像仓库地址,在maven的镜像仓库地址中,网速比较快的,当属阿里云的镜像仓库地址了,该镜像仓库地址如下:
<!--阿里云镜像-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
该地址的配置地点在maven根目录“conf”下的“settings.xml”文件中,打开该文件,在“mirrors”标签下添加上述代码即可。
配置本地maven仓库地址:
为了管理方便,我们一般会手动的配置一下maven的本地仓库地址,其配置地点还是在maven根目录“conf”下的“settings.xml”文件中,在这里,我的配置地点如下:
配置本地仓库位置,目录中不能有中文:
<!--配置本地仓库位置,目录中不能有中文 -->
<localRepository>D:/apache-maven-3.3.9/localRepository</localRepository>
6.1校验-初始化-编译-测试-打包-集成测试-安装-部署就是maven的生命周期
maven通过命令完成生命周期的执行
mvn clean:清理编译的项目
mvn compile:编译项目
mvn test:测试项目(运行测试类)
mvn package:负责将我们的项目打包
mvn install:将这个项目安装到仓库中
注意:执行以上命令必须在命令进入pom.xml 所在目录