qq群推广网站免费,网站 地图导航代码,广东东莞有哪些厂招工信息,搜狗竞价绑定网站要求Maven介绍-下载-安装-使用-基础知识
Maven的进阶高级用法可查看这篇文章#xff1a;
Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型…Maven介绍-下载-安装-使用-基础知识
Maven的进阶高级用法可查看这篇文章
Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型2.3 Maven仓库2.4 Maven安装 03. IDEA集成Maven3.1 配置Maven环境3.1.1 当前工程设置3.1.2 全局设置 3.2 Maven项目3.2.1 创建Maven项目3.2.2 POM配置详解3.2.3 Maven坐标详解 3.3 导入Maven项目 04. 依赖管理4.1 依赖配置4.2 依赖传递4.2.1 依赖具有传递性4.2.2 排除依赖 4.3 依赖范围4.4 生命周期4.4.1 介绍4.4.2 执行 01. Maven
1.1 初识Maven
1.1.1 什么是Maven
Maven是Apache旗下的一个开源项目是一款用于管理和构建java项目的工具。
官网https://maven.apache.org/ Apache 软件基金会成立于1999年7月是目前世界上最大的最受欢迎的开源软件基金会也是一个专门为支持开源项目而生的非盈利性组织。 开源项目https://www.apache.org/index.html#projects-list 1.1.2 Maven的作用
使用Maven能够做什么呢
依赖管理统一项目结构项目构建
依赖管理
方便快捷的管理项目依赖的资源(jar包)避免版本冲突问题
当使用maven进行项目依赖(jar包)管理则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中添加一段如下图所示的配置即可实现。 **统一项目结构 : **
提供标准、统一的项目结构
在项目开发中当你使用不同的开发工具 (如Eclipse、Idea)创建项目工程时 若我们创建的是一个maven工程是可以帮我们自动生成统一、标准的项目目录结构 具体的统一结构如下 目录说明 src/main/java: java源代码目录src/main/resources: 配置文件信息src/test/java: 测试代码src/test/resources: 测试配置文件信息 项目构建 :
maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式
如上图所示我们开发了一套系统代码需要进行编译、测试、打包、发布这些操作如果需要反复进行就显得特别麻烦而Maven提供了一套简单的命令来完成项目构建。 综上所述可以得到一个结论Maven是一款管理和构建java项目的工具
02. Maven概述
2.1 Maven介绍
Apache Maven是一个项目管理和构建工具它基于项目对象模型(Project Object Model , 简称: POM)的概念通过一小段描述信息来管理项目的构建、报告和文档。
官网https://maven.apache.org/
Maven的作用
方便的依赖管理统一的项目结构标准的项目构建流程
2.2 Maven模型
项目对象模型 (Project Object Model)依赖管理模型(Dependency)构建生命周期/阶段(Build lifecycle phases)
1). 构建生命周期/阶段(Build lifecycle phases) 以上图中紫色框起来的部分就是用来完成标准化构建流程 。当我们需要编译Maven提供了一个编译插件供我们使用当我们需要打包Maven就提供了一个打包插件供我们使用等。
2). 项目对象模型 (Project Object Model) 以上图中紫色框起来的部分属于项目对象模型就是将我们自己的项目抽象成一个对象模型有自己专属的坐标如下图所示是一个Maven项目 坐标就是资源(jar包)的唯一标识通过坐标可以定位到所需资源(jar包)位置 3). 依赖管理模型(Dependency)
以上图中紫色框起来的部分属于依赖管理模型是使用坐标来描述当前项目依赖哪些第三方jar包 之前我们项目中需要jar包时直接就把jar包复制到项目下的lib目录而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢 答案Maven仓库 2.3 Maven仓库
仓库用于存储资源管理各种jar包 仓库的本质就是一个目录(文件夹)这个目录被用来存储开发中所有依赖(就是jar包)和插件 Maven仓库分为
本地仓库自己计算机上的一个目录(用来存储jar包)中央仓库由Maven团队维护的全球唯一的。仓库地址https://repo1.maven.org/maven2/远程仓库(私服)一般由公司团队搭建的私有仓库 当项目中使用坐标引入对应依赖jar包后首先会查找本地仓库中是否有对应的jar包 如果有则在项目直接引用 如果没有则去中央仓库中下载对应的jar包到本地仓库
如果还可以搭建远程仓库(私服)将来jar包的查找顺序则变为 本地仓库 -- 远程仓库– 中央仓库
2.4 Maven安装
Maven下载安装及其配置
03. IDEA集成Maven
我们要想在IDEA中使用Maven进行项目构建就需要在IDEA中集成Maven
3.1 配置Maven环境
3.1.1 当前工程设置
1、选择 IDEA中 File Settings Build,Execution,Deployment Build Tools Maven
Maven下载安装及其配置
3、配置工程的编译版本为11
Maven默认使用的编译版本为5版本过低 上述配置的maven环境只是针对于当前工程的如果我们再创建一个project又恢复成默认的配置了。 要解决这个问题 我们就需要配置全局的maven环境。
3.1.2 全局设置
到这个页面完成同样的操作【点文件关闭项目到这个页面】
3.2 Maven项目
3.2.1 创建Maven项目
1、创建一个空项目 2、创建模块选择Maven点击Next 3、填写模块名称坐标信息点击finish创建完成
4、在Maven工程下创建HelloWorld类 Maven项目的目录结构: maven-project01 |— src (源代码目录和测试代码目录) |— main (源代码目录) |— java (源代码java文件目录) |— resources (源代码配置文件目录) |— test (测试代码目录) |— java (测试代码java目录) |— resources (测试代码配置文件目录) |— target (编译、打包生成文件存放目录) 5、编写 HelloWorld并运行
public class HelloWorld {public static void main(String[] args) {System.out.println(Hello Maven ...);}
}3.2.2 POM配置详解
POM (Project Object Model) 指的是项目对象模型用来描述当前的maven项目。
使用pom.xml文件来实现
pom.xml文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd!-- POM模型版本 --modelVersion4.0.0/modelVersion!-- 当前项目坐标 --groupIdcom.itheima/groupIdartifactIdmaven_project1/artifactIdversion1.0-SNAPSHOT/version!-- 打包方式 --packagingjar/packaging/projectpom文件详解
projectpom文件的根标签表示当前maven项目modelVersion 声明项目描述遵循哪一个POM模型版本 虽然模型本身的版本很少改变但它仍然是必不可少的。目前POM模型版本是4.0.0 坐标 groupId、artifactId、version 定位项目在本地仓库中的位置由以上三个标签组成一个坐标 packaging maven项目的打包方式通常设置为jar或war默认值jar
3.2.3 Maven坐标详解
什么是坐标
Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成
groupId定义当前Maven项目隶属组织名称通常是域名反写例如com.itheimaartifactId定义当前Maven项目名称通常是模块名称例如 order-service、goods-serviceversion定义当前项目版本号
如下图就是使用坐标表示一个项目 注意 上面所说的资源可以是插件、依赖、当前项目。我们的项目如果被其他的项目依赖时也是需要坐标来引入的。 3.3 导入Maven项目
方式1使用Maven面板快速导入项目
打开IDEA选择右侧Maven面板点击 号选中对应项目的pom.xml文件双击即可 说明如果没有Maven面板选择 View Appearance Tool Window Bars 方式2使用idea导入模块项目
File Project Structure Modules Import Module 找到要导入工程的pom.xml 04. 依赖管理
4.1 依赖配置
依赖指当前项目运行所需要的jar包。一个项目中可以引入多个依赖
例如在当前工程中我们需要用到logback来记录日志此时就可以在maven工程的pom.xml文件中引入logback的依赖。具体步骤如下 在pom.xml中编写dependencies标签 在dependencies标签中使用 dependency引入坐标 定义坐标的 groupId、artifactId、version
dependencies!-- 第1个依赖 : logback --dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.11/version/dependency!-- 第2个依赖 : junit --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency
/dependencies点击刷新按钮引入最新加入的坐标 刷新依赖保证每一次引入新的依赖或者修改现有的依赖配置都可以加入最新的坐标 注意事项 如果引入的依赖在本地仓库中不存在将会连接远程仓库 / 中央仓库然后下载依赖这个过程会比较耗时耐心等待如果不知道依赖的坐标信息可以到mvn的中央仓库https://mvnrepository.com/中搜索 添加依赖的几种方式
利用中央仓库搜索的依赖坐标 利用IDEA工具搜索依赖 【贼慢–】 熟练上手maven后快速导入依赖 4.2 依赖传递
4.2.1 依赖具有传递性
早期我们没有使用maven时向项目中添加依赖的jar包需要把所有的jar包都复制到项目工程下。如下图所示需要logback-classic时由于logback-classic又依赖了logback-core和slf4j所以必须把这3个jar包全部复制到项目工程下 我们现在使用了maven当项目中需要使用logback-classic时只需要在pom.xml配置文件中添加logback-classic的依赖坐标即可。 在pom.xml文件中只添加了logback-classic依赖但由于maven的依赖具有传递性所以会自动把所依赖的其他jar包也一起导入。
依赖传递可以分为 直接依赖在当前项目中通过依赖配置建立的依赖关系 间接依赖被依赖的资源如果依赖其他资源当前项目间接依赖其他资源 比如以上图中
projectA依赖了projectB。对于projectA 来说projectB 就是直接依赖。而projectB依赖了projectC及其他jar包。 那么此时在projectA中也会将projectC的依赖传递下来。对于projectA 来说projectC就是间接依赖。 4.2.2 排除依赖
问题之前我们讲了依赖具有传递性。那么A依赖BB依赖C如果A不想将C依赖进来是否可以做到
答案在maven项目中我们可以通过排除依赖来实现。
什么是排除依赖
排除依赖指主动断开依赖的资源。被排除的资源无需指定版本
dependencygroupIdcom.itheima/groupIdartifactIdmaven-projectB/artifactIdversion1.0-SNAPSHOT/version!--排除依赖, 主动断开依赖的资源--exclusionsexclusiongroupIdjunit/groupIdartifactIdjunit/artifactId/exclusion/exclusions
/dependency依赖排除示例 maven-projectA依赖了maven-projectBmaven-projectB依赖了Junit。基于依赖的传递性所以maven-projectA也依赖了Junit 使用排除依赖后 4.3 依赖范围
在项目中导入依赖的jar包后默认情况下可以在任何地方使用。 如果希望限制依赖的使用范围可以通过scope标签设置其作用范围。 作用范围 主程序范围有效main文件夹范围内 测试程序范围有效test文件夹范围内 是否参与打包运行package指令范围内 如上图所示给junit依赖通过scope标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境其他环境下不能使用。
scope标签的取值范围
scope值主程序测试程序打包运行范例compile默认YYYlog4jtest-Y-junitprovidedYY-servlet-apiruntime-YYjdbc驱动
4.4 生命周期
4.4.1 介绍
Maven的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建经历哪些阶段。
在Maven出现之前项目构建的生命周期就已经存在软件开发人员每天都在对项目进行清理编译测试及部署。虽然大家都在不停地做构建工作但公司和公司间、项目和项目间往往使用不同的方式做类似的工作。
Maven从大量项目和构建工具中学习和反思然后总结了一套高度完美的易扩展的项目构建生命周期。这个生命周期包含了项目的清理初始化编译测试打包集成测试验证部署和站点生成等几乎所有构建步骤。
Maven对项目构建的生命周期划分为3套相互独立 clean清理工作。 default核心工作。如编译、测试、打包、安装、部署等。 site生成报告、发布站点等。
三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图:
我们看到这三套生命周期里面有很多很多的阶段这么多生命周期阶段其实我们常用的并不多主要关注以下几个
• clean移除上一次构建生成的文件
• compile编译项目源代码
• test使用合适的单元测试框架运行测试(junit)
• package将编译后的文件打包如jar、war等
• install安装项目到本地仓库
Maven的生命周期是抽象的这意味着生命周期本身不做任何实际工作。在Maven的设计中实际任务如源代码编译都交由插件来完成。 IDEA工具为了方便程序员使用maven生命周期在右侧的maven工具栏中已给出快速访问通道 生命周期的顺序是clean -- validate -- compile -- test -- package -- verify -- install -- site -- deploy
我们需要关注的就是clean -- compile -- test -- package -- install 说明在同一套生命周期中我们在执行后面的生命周期时前面的生命周期都会执行。 思考当运行package生命周期时clean、compile生命周期会不会运行 clean不会运行compile会运行。 因为compile与package属于同一套生命周期而clean与package不属于同一套生命周期。 4.4.2 执行
在日常开发中当我们要执行指定的生命周期时有两种执行方式
在idea工具右侧的maven工具栏中选择对应的生命周期双击执行在DOS命令行中通过maven命令执行
方式一在idea中执行生命周期
选择对应的生命周期双击执行 compile test package install clean 方式二在命令行中执行生命周期
进入到DOS命令行