1)Maven是基于java平台(意味着我们要配置jdk)的自动化构建工具。
基于项目对象模型(缩写:POM)概念,Maven就能管理一个项目的构建、报告和文档等步骤。
构建: 以“Java源文件”,“框架配置文件”,“HTML”,“图片”等为原料,去"生产"一个可以运行的项目的过程。
例:Java源文件—>编译—>.class字节码文件->交给JVM去执行
1.下载解压: https://maven.apache.org/download.cgi
2.配置环境变量
(1)配置JDK
3.测试是否成功:cmd 输入:mvn -v
4.Maven目录:
5.idea中配置Maven
1.Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
2.maven仓库的种类与关系 :
本地仓库 :用来存储从远程仓库或中央仓库下载的 jar 包,项目使用一些插件或jar 包,优先从本地仓库查找。
中央仓库:软件中内置一个远程仓库地址,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。
私服 :一般存在于某个公司内部,自己搭建的小型中央仓库
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会尝试从中央仓库下载(需连网)构件至本地仓库,然后再使用本地仓库的构件。
若是公司中,则是本地仓库-->私服-->中央仓库[连网]
必要元素: groupId:当前Maven项目隶属的实际大项目(或者隶属的组织名称)
artifactId:该元素定义实际项目中的一个Maven项目(模块)(组织中具体的项目名称)
version:当前maven项目所处的版本
可选元素
packaging:定义该maven项目的打包方式
jar包:普通Java工程
War包:web工程
pom包:用于maven工程的继承,通常父工程设置为pom
如何添加坐标?
1)在本地仓库中搜索
2)在网上找 ---网址:https://mvnrepository.com/
src目录是源代码和测试代码的根目录
main目录是项目源代码(不含测试目录)的根目录,test目录包含测试源代码。
resources目录是资源目录。
如果项目是web应用程序,则webapp目录包含Java web应用程序。webapp目录将成为web应用程序的根目录,包含WEB-INF目录等。
目标目录由Maven创建,包含Maven生成的所有已编译类、JAR文件等。在执行clean构建阶段时,目标目录会被清除。
Maven自动构建是指 :一个项目从 编译、测试、打包、安装、部署的这个过程,都交给Maven来管理。
清除:将编译结果进行删除,为重新编译做准备
编译:java源码-->class字节码文件
测试:用测试代码去测试开发代码
打包:将多个文件变成一个 (java-->jar、web-->war),用于安装和部署
安装:将打成的包放到本地仓库
部署:将包放到服务器上准备运行
Maven对项目构建过程分为三套相对独立的生命周期。每一个阶段都有一个对应的命令,且有相应的插件来支持命令的运行。
mvn -v:查看maven版本
clean:删除target文件夹 ---------------------->清理生命周期(clean)
compile:编译项目-->生成了class文件(target文件夹)-------------------->默认生命周期(default)
test:测试项目-->生成测试报告等
package:打包项目生成-->jar文件等
install:安装jar包到本地仓库
deploy: 发布(需要进行一些配置)
site 生成项目的站点文档 ----------------------->站点生命周期
Maven以POM文件(项目对象模型)为中心,POM文件是xml格式,是自动构建的配置文件,位于项目的根目录下。
POM文件:pom.xml文件中包含了依赖关系、构建目录等项目信息和配置信息。
Maven读取pom.xml文件,然后执行构建目标。
Pom.xml文件基本元素:
1.依赖有直接依赖和间接依赖两种:
直接依赖:项目中直接导入的依赖
间接依赖:项目中没有直接导入的包,通过直接依赖的包传递到项目中
这样设计的好处就是可以传递的依赖不必在每个模块工程中都重复声明。
2.解决jar包冲突(依赖的原则):
1) 路径短者优先
2) 相同路径下,先声明者优先(先声明的jar包坐标下的依赖包,可以优先进入项目中。)
3) 依赖排除 :
3.pom文件内的标签 ----
Maven工程是可以分父子依赖关系的:
通常情况下,在一个共同的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,我们称其为其他子项目 pom 的 pom 父。
比如说我们有一个父项目maven-parent,该父项目拥有一个子项目A,如果在父项目中依赖了junit,那么在子项目A中即便是没有引入junit,在子项目中仍然能够使用junit,因为子项目天然继承了父项目中的junit依赖。
当我们的项目模块很多的时候,我们使用Maven管理项目非常方便.
由于我们的模块很多,所以我们又抽象了一层,抽出一个父项目来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。
4.maven工程拆分与聚合思想
1)普通项目 分三层:dao / service / controller
例:看订单操作
买家:买家要看到订单,必须要把数据库中的订单查询出来。 ------dao层的任务
卖家:卖家要看到订单,必须要把数据库中的的订单数据查询出来。 -------dao层的任务
普通项目:需要粘贴复制多份,维护起来麻烦
Maven项目:只需要一套,实际项目中放jar包坐标即可,只需维护一份
2)Maven解决代码可重用和便于维护问题:
maven把一个完整的项目,分成不同的独立的模块,这些模块都有各自独立的坐标。哪个地方需要某个模块,就直接引用该模块坐标即可。
以后如果在公司开发新项目,我们首先考虑的是,dao,service,utils,domain这些模块是否已经存在,若存在就可以直接使用。--------------------Maven拆分的思想
我们可以把拆分零散的模块聚合到一起编写一个完整的项目。---------------Maven聚合思想
maven是一个项目管理工具。
1)一键构建:maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。
maven常用命令:clean,compile,test,package,install,deploy。
maven三套生命周期:清理生命周期,默认生命周期,站点生命周期。
2)依赖管理:maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
仓库的种类:本地仓库,远程仓库【私服】,中央仓库
仓库之间的关系:当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对应jar包。
默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地仓库。
在公司中,如果本地没有对应jar包,会先从私服下载jar包,如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。
解决jar包冲突(直接依赖,间接依赖)
Maven拆分与聚合
Maven的作用不仅仅是简单的一键构建和jar包管理,更重要的是将项目拆分与聚合。