目录

SSM基础专项复习4Maven项目管理工具1

SSM基础专项复习4——Maven项目管理工具(1)

https://i-blog.csdnimg.cn/direct/4a68c89560b44b75914267288458bd16.png

系列文章


1 Maven 的概念

1.1. 什么是 Maven

maven翻译为“专家”,“内行” Maven 是跨平台的项目管理工具 。主要服务于基于 Java 平台的项目构建,依赖管理和项目信息管理。 什么是理想的项目构建? 高度自动化,跨平台,可重用的组件,标准化的 什么是依赖?为什么要进行依赖管理? 在软件开发或其他项目管理情境中,依赖指的是一个组件、模块、库、服务或任务等对其他元素的依靠关系。自动下载,统一依赖管理。 A1.0 依托于 B 2.0 依托于 C3.0

在 Maven 项目中,依赖通过在 pom.xml 文件里的 标签下声明。每个依赖使用 子标签定义,包含 groupIdartifactIdversion 这三个基本坐标,以此来唯一标识一个依赖项。 有哪些项目信息? 项目名称描述等,开发人员信息,开发者信息等

1.2. 什么是依赖管理

对第三方依赖包的管理,可以连接互联网下载项目所需第三方 jar 包。对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。

我们可以在maven的中央仓库找到对应的jar包

maven仓库地址https://i-blog.csdnimg.cn/direct/da543e4d6fc54f33909548a901e38ed3.png

1.3. 什么是项目构建

项目构建:是一个从编写源代码到编译、测试、运行、打包、部署的过程。 传统项目和 maven 项目构建的两种方式 传统项目: 打开 Idea 编写源代码和配置文件,对源代码进行编译,可以使用Junit 进行单元测试,把项目打成 war 包,部署到 Tomcat 服务器中运行。 maven 项目: maven 将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。 清理 – > 编译 –> 测试 –> 报告 –> 打包 –> 部署 使用maven的好处: 可以通过命令完成项目构建。(测试:使用 mvn tomcat:run 的命令来发布运行项目)maven 对每个构建阶段进行规范,有利于大型团队协作开发。 https://i-blog.csdnimg.cn/direct/345b8e219a5b469e96077d82fb177110.png

1.4. Maven 的应用场景

maven 的应用场景,开发人员只要按着 maven 标准的目录结构进行开发即可,然后提交代码。在测试服务器上拉取 Java 源码,然后可以使用 maven 的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。https://i-blog.csdnimg.cn/direct/3d2e73203a134d328943da59dbccbb22.png

1.5. 为什么使用 Maven

IDE?Eclipse?IDEA?

  • 手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
  • 每个人的 IDE 配置都不同,很容易就出错出现本地代码换个地方编译 Ant?
  • 没有一个约定的目录结构
  • 必须明确让 ant 做什么,什么时候做,然后编译,打包
  • 没有生命周期,必须定义目标及其实现的任务序列
  • 没有集成依赖管理

Ant 是一个基于 Java 的构建工具,由 Apache 软件基金会开发和维护。它主要用于自动化软件项目的构建过程,比如编译源代码、运行测试、生成文档以及打包部署等任务 Maven?

  • 拥有约定,知道你的代码在哪里,放到哪里去
  • 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
  • 只需要定义一个 pom.xml,然后把源码放到默认的目录,Maven 帮你处理其他事情
  • 拥有依赖管理,仓库管理

1.6. Maven 模型

https://i-blog.csdnimg.cn/direct/5b434e1ea14e4b83bbaa42a091476e70.png

2 初识 Maven

2.1. Maven 安装

见我的另一篇博客 [Maven的安装——给Idea配置Maven_idea 安装maven- CSDN博客文章浏览阅读2.4k次,点赞31次,收藏26次。Maven是一个开源的项目管理工具,它主要用于Java项目的构建、依赖管理和项目生命周期管理。_idea 安装mavenhttps://g.csdnimg.cn/static/logo/favicon32.icohttps://blog.csdn.net/2301_78566776/article/details/143890988?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220e9d5300004d38107b49caf0c8057837%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=0e9d5300004d38107b49caf0c8057837&biz_id=0&utm_medium=distribute.pc_search_result.none- task-blog-2blogfirst_rank_ecpm_v1rank_v31_ecpm-1-143890988-null- null.nonecase&utm_term=maven&spm=1018.2226.3001.4450]( task-blog-2blogfirst_rank_ecpm_v1rank_v31_ecpm-1-143890988-null- null.nonecase&utm_term=maven&spm=1018.2226.3001.4450 “Maven的安装——给Idea配置Maven_idea 安装maven-CSDN博客”)

2.1.1 Maven 安装目录分析

bin: 含有 mvn 运行的脚本 boot: 含有 plexus-classworlds 类加载器框架 conf: 含有 settings.xml 配置文件 lib:含有 Maven 运行时所需要的 java 类库 LICENSE.txt, NOTICE.txt, README.txt 针对 Maven 版本,第三方软件等简要介绍

2.2 按照约定创建 Maven 项目目录

src/main/java —— 存放项目的.java 文件 src/main/resources —— 存放项目资源文件,如 spring, mybatis配置文件 src/test/java —— 存放所有测试.java 文件,如 JUnit 测试类 src/test/resources —— 测试资源文件 target —— 项目输出位置 pom.xml ——配置依赖的位置

2.3 Maven 项目视图

Maven 项目视图主要用于查看该 maven 项目的各项属性,同时也可以进行一些常见的maven 的操作,比如打包,清理,测试等等; https://i-blog.csdnimg.cn/direct/aad222dc50764e839e899ab7ce7e609b.png

3、 Maven 进阶

3.1. pom.xml 文件

就像 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

3.2. 坐标

3.2.1. 坐标的概念

在 Maven 中 坐 标 是 构 件 的 唯 一 标 识 , Maven 坐 标 的 元素包括groupId、artifactId、version、packaging、classifier。上述 5 个元素中,groupId、artifactId、version 是必须定义的,packaging 是可选的 ( 默认为jar )。

3.2.2. 坐标的意义

Maven 世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范 拥有了统一规范,就可以把查找工作交给机器

3.2.3. 坐标的含义

groupId: 组织标识,一般为:公司网址的反写+项目名 artifactId: 项目名称,一般为:项目名-模块名 version: 版本号 形式为 0.0.1-SNAPSHOT: 第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个0 表示小版本号 SNAPSHOT – 快照版本,ALPHA – 内侧版本,BETA – 公测版本,RELEASE – 稳定版本,GA – 正式发布 packaging: 打包的方式,如:pom, jar, maven-plugin, ejb, war,… clissifier :用来帮助定义构件输出的一些附属构件。

3.3. 依赖

3.3.1. 依赖的意义

当编写 Java 代码时,我们总是需要一些库,例如,做单元测试我们需要JUnit库。对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。不同的项目需要不同版本的库。 保持项目最新的库 JAR 文件的正确版本不是一个容易的任务。 每个外部 JAR 可能还依赖于其他外部 JAR 文件等。以递归方式下载所有这些外部依赖JAR 文件并确保下载正确的版本是一项巨大的任务。 当项目越来越大,我们将需要越来越多的外部依赖。 Maven 将下载它们并将它们放在您的本地 Maven 存储库中。 我们可以在 POM 文件中的 dependencies元素内指定依赖关系。

3.3.2. 依赖的使用

例如我们的项目需要进行单元测试,则需要使用到 junit-4.9.jar 包,使用maven引用该依赖的方式如下: 属性说明:

  • 三维坐标:引用依赖包的三维坐标,用来定位该依赖包;
  • scope: 控制该依赖包在什么情况下会被加到 classpath 中;

3.4. 依赖范围

Maven 项目在开发工程中有三套 classpath 主代码: main 下面的都是主代码在编译的时候的依赖 测试代码 :test 下是测试代码编译的时候的依赖 运行时: main 代码在运行的时候对包的依赖 依赖范围的使用,通过在引用第三方依赖时的标签进行设置,例如: https://i-blog.csdnimg.cn/direct/c45c0e0d314342d2a20f1370ced0e762.png 共 6 种 scope,包括:compile、provided、runtime、test、system、import。例如上图的 junit,只在测试中使用,则选择 test 即可,默认为 compile

  1. Compile:编译依赖范围。默认使用此依赖范围,其下的 maven 依赖,对于编译,测试,运行 classpath 都有效。
  2. Test:测试依赖范围。只对测试 classpath 有效,编译主代码或运行项目时无法使用此依赖。典型例子如 junit。
  3. Provided:已提供依赖范围。其对于编译与测试 classpath 有效,运行时无效。如在 web 开发时,只有在编译和测试时才用到 servlet-api,将其设置为此范围,在运行时 servlet-api 由 web 容器提供,无须依赖。并且在打war 包时,此范围的依赖不会打在 WEB-INF/lib 下。
  4. Runtime:运行时依赖范围。与 provided 相对,运行时classpath 有效。典型例子如 jdbc(编写是接口规范运行是提供具体实现类需要jar 包)。https://i-blog.csdnimg.cn/direct/b6bb93b214e34cc781735e45587ff8c0.png

3.5. 依赖传递和可选依赖

3.5.1. 依赖传递

应用场景: 第一直接依赖: HelloFriend 项目依赖 Hello 项目 第二直接依赖: MakeFriend 项目依赖 HelloFriend 项目 https://i-blog.csdnimg.cn/direct/ffa790b8bcc14516b645ca8f228c1232.png

3.5.2. 依赖范围对传递依赖的影响

传递依赖是会受到依赖范围的影响的,具体来看结果如下: https://i-blog.csdnimg.cn/direct/80f47b7afece43e2b70af49cf82a6163.png

3.5.3. 依赖阻断

我们使用 true 例如我们在 HelloFriend 项目里面的 Hello 依赖处添加该配置 https://i-blog.csdnimg.cn/direct/a0c7fc6a2dee40c2b1f6df74448c942e.png 则 makeFriend 项目里面就不会再引入 Hello 的依赖 https://i-blog.csdnimg.cn/direct/8f2172b5b952423c8e6613e0df9aefc3.png

3.5.4. 可选依赖

如果我们需要在依赖中明确的排除掉某一依赖,则可以使用 exclusion 属性,排除掉引用的依赖,如图: https://i-blog.csdnimg.cn/direct/f4c26951e81d4f08bb073a6d0e4500c5.png

4、仓库

4.1 仓库的概念

在 Maven 的术语中,仓库是一个位置(place)。 Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。 在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是 JAR),它就是放置所有JAR 文件(WAR,ZIP,POM 等等)的地方。 仓库的类型有:  本地(local)  中央(central)  远程(remote)

4.2 依赖搜索顺序

https://i-blog.csdnimg.cn/direct/661ad1568ca04b17ac51268eb0503452.png