声明:本文来源于黑马程序员PDF讲义
做为一名Java开发工程师,后端 Web开发技术是我们学习的重点,后端Web开发技术的学习,我们会先学习Java项目的构建工具:Maven
Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
使用Maven能够做什么呢?
1. 依赖管理 2. 统一项目结构 3. 项目构建
当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目 的pom.xml文件中,添加一段如下图所示的配置即可实现。
org.springframework.boot
spring-boot-dependencies
2.5.15
pom
import
com.alibaba
druid-spring-boot-starter
${druid.version}
eu.bitwalker
UserAgentUtils
${bitwalker.version}
com.github.pagehelper
pagehelper-spring-boot-starter
${pagehelper.boot.version}
com.github.oshi
oshi-core
${oshi.version}
io.springfox
springfox-boot-starter
${swagger.version}
io.swagger
swagger-models
commons-io
commons-io
${commons.io.version}
org.apache.poi
poi-ooxml
${poi.version}
org.apache.velocity
velocity-engine-core
${velocity.version}
commons-collections
commons-collections
${commons.collections.version}
com.alibaba.fastjson2
fastjson2
${fastjson.version}
io.jsonwebtoken
jjwt
${jwt.version}
pro.fessional
kaptcha
${kaptcha.version}
com.xxxx
xxxx-quartz
${xxxx.version}
com.xxxx
xxxx-generator
${xxxx.version}
com.xxxx
xxxx-framework
${xxxx.version}
com.xxxx
xxxx-system
${xxxx.version}
com.xxxx
xxxx-common
${xxxx.version}
com.xxxx
xxxx-main
${jcdm.version}
org.apache.commons
commons-pool2
2.12.0
1). 构建生命周期/阶段(Build lifecycle & phases)
以上图中紫色框起来的部分,就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。
2). 项目对象模型 (Project Object Model)
以上图中紫色框起来的部分属于项目对象模型,就是将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:
坐标,就是资源(jar包)的唯一标识,通过坐标可以定位到所需资源(jar包)位置
3). 依赖管理模型(Dependency)
以上图中紫色框起来的部分属于依赖管理模型,是使用坐标来描述当前项目依赖哪些第三方jar包
之前我们项目中需要jar包时,直接就把jar包复制到项目下的lib目录,而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢?
答案:Maven仓库
仓库:用于存储资源,管理各种jar包
仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件
Maven仓库分为:
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包
如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为:本地仓库 --> 远程仓库--> 中央仓库
Maven安装配置步骤:
1. 解压安装 2. 配置仓库 3. 配置Maven环境变量
POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。
使用pom.xml文件来实现 pom.xml文件:
4.0.0
com.itheima
maven_project1
1.0-SNAPSHOT
jar
1、pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。
2、jar:工程的默认打包方式,打包成jar用作jar包使用。存放一些其他工程都会使用的类,工具类。我们可以在其他工程的pom文件中去引用它
3、 war:将会打包成war,发布在服务器上,如网站或服务。用户可以通过浏览器直接访问,或者是通过发布服务被别的工程调用
什么是坐标?
Maven坐标主要组成
如下图就是使用坐标表示一个项目:
依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖:
例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件 中,引入logback的依赖。具体步骤如下:
注意事项:
1. 如果引入的依赖,在本地仓库中不存在,将会连接远程仓库 / 中央仓库,然后下载依赖 (这个过程会比较耗时,耐心等待)
2. 如果不知道依赖的坐标信息,可以到mvn的中央仓库 (https://mvnrepository.com/)中搜索
问题:之前我们讲了依赖具有传递性。那么A依赖B,B依赖C,如果A不想将C依赖进来,是否可以做到?
答案:在maven项目中,我们可以通过排除依赖来实现
什么是排除依赖?
排除依赖:指主动断开依赖的资源。(被排除的资源无需指定版本)
com.itheima
maven-projectB
1.0-SNAPSHOT
junit
junit
在项目中导入依赖的jar包后,默认情况下,可以在任何地方使用。
如果希望限制依赖的使用范围,可以通过标签设置其作用范围
作用范围:
如上图所示,给junit依赖通过scope标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环 境,其他环境下不能使用。
Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。在Maven的设计中,实际任务 (如源代码编译)都交由插件来完成。
compile:
test:
package:
install:
clean: