Maven—B站学习总结
Maven是一个项目管理工具
定义:
Maven 是一个项目管理工具,
它包含了:
一个项目对象模型 (POM:Project Object Model),
一组标准集合,
一个项目生命周期(Project Lifecycle),
一个依赖管理系统(Dependency Management System),
和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
Maven的核心功能/作用:
1.依赖管理:
Maven对jar包的管理过程
Maven工程通过jar包的坐标(pom.xml文件中放置)去jar包的仓库找到对应的仓库
疑问: 通过读取 pom.xml 文件中的坐标,再到仓库中找到 jar 包,会不会很慢?从而导致这种方式
不可行!
通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,
这样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,
通过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再
读取出来的速度是一样的。
这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的目录就好比是索引,
有了这个目录我们就可以方便找到内容了,
一样的在 maven 仓库中有了索引我们就可以认为可以快速找到 jar 包。
2.核心构建:
在项目中,从编译、测试、运行、打包、安装 ,部署等一系列过程使用Maven进行管理,这个过程被称为构建,
其中,"一键构建" 指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。
Maven目录结构:
目录结构:
1.bin:存放了 maven 的命令,这里面有一个非常重要的命令mvn,mvn命令主要是用于构建项目,
比如: mvn tomcat:run
2.boot:存放了一些 maven 本身的引导程序,如类加载器等(Maven自身运行所需要的类加载器)
3.conf:存放了 maven 的一些配置文件,如 setting.xml 文件,这个文件是对Maven进行配置时需要的配置文件
4.lib:存放了 maven 本身运行所需的一些 jar 包
Maven默认本地文件夹位置
${user.home}系统盘用户目录
Maven仓库分类
1.本地仓库
2.远程仓库(私服)
3.中央仓库
启动项目:
在公司启动一个 Maven工程首先会在本地仓库找jar包,如果本地仓库没有jar包 就会去远程仓库(私服)找jar包,
如果远程仓库(私服)没有的话 可以从中央仓库下载 也可以从本地仓库上传。
通过<localRepository></localRepository>这个标签可以设置本地Maven仓库的路径
<localRepository>/Users/apple/.m2/repository</localRepository>
Maven项目标准目录结构(包含web项目)
src/main/java目录 —— 存放项目的.java 文件,核心代码位置
src/main/resources —— 存放项目资源文件,如 spring,配置文件
src/test/java目录 —— 存放所有单元测试.java 文件,测试代码部分,如 JUnit 测试类
src/test/resources —— 测试资源文件,测试配置文件
src/main/webapp —— 页面资源,就是,参数是,图片等等
target —— 项目输出位置,编译后的 class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
注:如果是普通的 java 项目,那么就没有 webapp 目录。web项目中有webapp
Maven常用命令
clean(清理):
把编译好的项目信息删掉,接收别人的项目,清理项目环境,因为每个人代码编译环境都不一样
compile(编译):
作用是将 src/main 下的文件编译为 class 文件,放置在target目录下。
test(测试):
测试命令 mvn test,会执行 src/test/java 下的单元测试类代码,
将代码文件编译成class文件后放入target目录下 ,
同时也编译了src/main下的代码,放置在target目录下。
package(打包):
是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包。
install(安装):
是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
从运行结果中,可以看出当后面的命令执行时,前面的操作过程也都会自动执行。
deploy(发布):
发布
Maven生命周期
1.清理生命周期:
clean
2.默认生命周期:
complie,test,package,install,deploy,每次之后后一个命令,都会将这个命令之前的操作都执行一遍
3.站点生命周期:
待补充
Maven概念模型图(POM文件标签)
查看pom.xml文件:这三个标签是项目的坐标,也就是项目自身的信息
<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>cn.itcast.maven</groupId>
<!--模块名称-->
<artifactId>maven-first</artifactId>
<!--当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本-->
<version>0.0.1-SNAPSHOT</version>
<packaging>打包类型</packaging>
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom
dependency标签里面显示的都是项目里面依赖的jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
plugin标签里面是运行环境信息:tomcat等等
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.version}</version>
<configuration>
<port>${webserver.port}</port>
<path>/${project.artifactId}</path>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>
</configuration>
</plugin>
pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下:
<project>: 文件的根节点 .
<modelversion>: pom.xml 使用的对象模型版本
<groupId>: 项目名称,一般写项目的域名
<artifactId>: 模块名称,子项目名或模块名称
<version>: 产品的版本号 .
<packaging>: 打包类型,一般有 jar、war、pom 等
<name>: 项目的显示名,常用于 Maven 生成的文档。
<description>: 项目描述,常用于 Maven 生成的文档
<dependencies>: 项目依赖构件配置,配置项目依赖构件的坐标
<build>: 项目构建配置,配置编译、运行插件等。
<scope>: 作用域。
Maven概念模型图
pom:project object model 项目对象模型
pom.xml是Maven的核心配置文件
一个Maven项目有且只有一个pom.xml文件,该文件必须在项目的根目录下
Maven概念模型图解: 讲述Maven的两个核心功能,其中项目运行所依赖的jar包信息有独立出来变成一个模型叫依赖管理模型,依赖管理模型中放的都是jar包的坐标