Maven实战读书笔记

掌握Maven:书籍推荐与安装配置详解 在现代软件开发中,项目管理工具对于保证项目开发的顺利进行至关重要。Maven作为一种功能强大的项目管理工具,以其简洁的项目对象模型(POM)、丰富的构建生命周期以及庞大的插件生态系统,赢得了广泛的应用。通过理解Maven的工作原理和优势,开发者不仅能够更有效地管理项目依赖,还能自动化构建过程、生成文档和报告,从而提高整个软件开发的效率和质量。在这一章中,我们将简要介绍Maven的起源、核心概念以及它在项目管理中的作用,为后续章节更深入的探讨打下基础。 阅读详情

Maven实战读书笔记

什么是构建

编译、 运行 单元 测试、 生成 文档、 打包 和 部署 等过程称之为构建。

pom.xml

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

groupId、 artifactId 和 version

groupId、 artifactId 和 version 的 三行。 这 三个 元素 定义 了 一个 项目 基本 的 坐标, 在 Maven 的 世界, 任何 的 jar、 pom 或者 war 都是 以 基于 这些 基本 的 坐标 进行 区分 的。

这里有点有意思的就是当你有一个自己或者别人编写的jar,可是你并不知道它的组织信息和版本号什么,当你想把他将它安装到你本地仓库的时候,groupId和artifactId和version都是可以自己定义的,只要你在pom里面保持一致就能将jar引入到你的项目中。

groupId 定义 了 项目 属于 哪个 组, 这个 组 往往 和 项目 所在 的 组织 或 公司 存在 关联。

artifactId 定义 了 当前 Maven 项目 在 组 中 唯一 的 ID,

version 指定了版本

快照

如1. 0- SNAPSHOT。 SNAPSHOT 意为 快照, 说明 该 项目 还 处于 开发 中, 是 不稳定的版本。

如果依赖中存在快照版本的jar,每次构建的时候,会自动检测仓库中是否有新的快照版本

比如 模块 A 的 版本 设定 为 2. 1- SNAPSHOT,在 发布 的 过程中, Maven 会 自动 为 构件 打上 时间 戳。 比如 2. 1- 20191214. 221414- 13 就 表示 2019 年 12 月 14 日 22 点 14 分 14 秒 的 第 13 次 快照。 有了 该 时间 戳, Maven 就能 随时 找到 仓库 中 该 构件 2. 1- SNAPSHOT 版本 最新 的 文件。

maven所有的命令都是基于插件的,当我们执行第一条maven命令的时候会去下载插件到我们的本地maven仓库中

clean

告诉 Maven 清理 输出 目录 target/

compile

compile 任务, 将 项目 主 代码 编译 至 target/ classes 目录

mvn clean compile

clean 告诉 Maven 清理 输出 目录 target/, compile 告诉 Maven 编译 项目 主 代码, 从 输出 中 看到 Maven 首先 执行 了 clean: clean 任务, 删除 target/ 目录。 默认 情况下, Maven 构建 的 所有 输出 都在 target/ 目录 中; 接着 执行 resources: resources 任务( 未定义 项目 资源, 暂且 略过); 最后 执行 compiler: compile 任务, 将 项目 主 代码 编译 至 target/ classes 目录。

scope

scope 为 依赖 范围, 若 依赖 范围 为 test 则 表示 该 依赖 只对 测试 有效。 换句话说, 测试 代码 中的 import JUnit 代码 是 没有 问题 的, 但是 如果 在 主 代码 中用 import JUnit 代码, 就会 造成 编译 错误。 如果不 声明 依赖 范围, 那么 默认值 就是 compile, 表示 该 依赖 对 主 代码 和 测试 代码 都 有效。

·compile: 编译 依赖 范围。 如果 没有 指定, 就会 默认 使用 该 依赖 范围。 使用 此 依赖 范围 的 Maven 依赖, 对于 编译、 测试、 运行 三种 classpath 都 有效。 典型的 例子 是 spring- core, 在 编译、 测试 和 运行 的 时候 都 需要 使用 该 依赖。

·test: 测试 依赖 范围。 使用 此 依赖 范围 的 Maven 依赖, 只对 于 测试 classpath 有效, 在 编译 主 代码 或者 运行 项目 的 使用 时 将 无法 使用 此类 依赖。 典型的 例子 是 JUnit, 它 只有 在编 译 测试 代码 及 运行 测试 的 时候 才 需要。

·provided: 已提 供 依赖 范围。 使用 此 依赖 范围 的 Maven 依赖, 对于 编译 和 测试 classpath 有效, 但在 运行时 无效。 典型的 例子 是 servlet- api, 编译 和 测试 项目 的 时候 需要 该 依赖, 但在 运行 项目 的 时候, 由于 容器 已经 提供, 就不 需要 Maven 重复 地 引入 一遍。

·runtime: 运行时 依赖 范围。 使用 此 依赖 范围 的 Maven 依赖, 对于 测试 和 运行 classpath 有效, 但在 编译 主 代码 时 无效。 典型的 例子 是 JDBC 驱动 实现, 项目 主 代码 的 编译 只需 要 JDK 提供 的 JDBC 接口, 只有 在 执行 测试 或者 运行 项目 的 时候 才 需要 实现 上述 接口 的 具体 JDBC 驱动。

·system: 系统 依赖 范围。

·import( Maven 2. 0. 9 及 以上): 导入 依赖 范围。

mvn clean test

可以用来自动执行测试代码

mvn clean package

用来打包,默认是jar,在pom中可以指定,至于打出来包的名字也是可以指定的。可以通过finalName用来指定名字

fileName

用来指定打包的名字

install

将 项目 输出 的 jar 安装 到了 Maven 本地 仓库 中

mvn clean install

执行 test 之前 是 会 先 执行 compile 的, 执行 package 之前 是 会 先 执行 test 的, 而 类似 地, install 之前 会 执行 package,总结:mvn clean package实际执行了 compiler,test,package,install。

何为 Maven 坐标

Maven 定义 了 这样 一组 规则: 世界上 任何 一个 构件 都可以 使用 Maven 坐标 唯一 标识, Maven 坐标 的 元素 包括 groupId、 artifactId、 version、 packaging、 classifier。 现在, 只要 我们 提供 正确 的 坐标 元素, Maven 就能 找到 对应 的 构件。

groupId、 artifactId、 version 是 必须 定义 的, packaging 是 可选 的( 默认 为 jar), 而 classifier 是 不能 直接 定义 的。

packaging

该 元素 定义 Maven 项目 的 打包 方式。

传递性依赖:

B依赖A,C依赖B,那么C也可以使用A的依赖

传递性 依赖 机制, Maven 会 解析 各个 直接 依赖 的 POM, 将那 些 必要 的 间接 依赖, 以 传递性 依赖 的 形式 引入 到 当前 的 项目 中。

传递性依赖范围:最左边为第一依赖,最上面为第二依赖

在这里插入图片描述

如:A依赖B范围是test,则B称为第一依赖,而B又要依赖C范围是compile,那么C称为第二依赖,则C对于A来说依赖范围是test

第一声明优先

依赖传递会导致版本混乱, 但是 从 Maven 2. 0. 9 开始, 为了 尽可能 避免 构建 的 不确定性, Maven 定义 了 依赖 调解 的 第二 原则: 第一 声明者 优先。路径长短来判断。如关系: A-> B-> C-> X( 1. 0)、 A-> D-> X( 2. 0),此时会有两个x,实际使用的是2.0那个,因为路径短。

exclusions

为什么需要排除依赖:

使传递性 依赖 会 给 项目 隐式 地 引入 很多 依赖, 这 极大 地 简化 了 项目 依赖 的 管理, 但是 有些 时候 这种 特性 也会 带来 问题。 例如, 当前 项目 有一个 第三方 依赖, 而 这个 第三方 依赖 由于 某些 原因 依赖 了 另外 一个 类 库 的 SNAPSHOT 版本, 那么 这个 SNAPSHOT 就会 成为 当前 项目 的 传递性 依赖, 而 SNAPSHOT 的 不稳定 性 会 直接影响 到 当前 的 项目。 这时 就 需要 排 除掉 该 SNAPSHOT, 并且 在当 前项 目中 声明 该类 库 的 某个 正式 发布 的 版本。 还有 一些 情况, 你 可能 也 想要 替换 某个 传递性 依赖, 比如 Sun JTA API, Hibernate 依赖于 这个 JAR, 但是 由于 版权 的 因素, 该类 库 不在 中央 仓库 中, 而 Apache Geronimo 项目 有一个 对应 的 实现。 这时 你就 可以 排除 Sun JAT API, 再 声明 Geronimo 的 JTA API 实现,

用 exclusions 元素 声明 排除 依赖, exclusions 可以 包含 一个 或者 多个 exclusion 子 元素, 因此 可以 排除 一个 或者 多个 传递性 依赖。 需要 注意 的 是, 声明 exclusion 的 时候 只需 要 groupId 和 artifactId, 而 不需要 version 元素,

maven仓库

得益 于 坐标 机制, 任何 Maven 项目 使用 任何 一个 构件 的 方式 都是 完全 相同 的。 在此 基础上, Maven 可以 在某 个位 置 统一 存储 所有 Maven 项目 共享 的 构件, 这个 统一 的 位置 就是 仓库。 实际 的 Maven 项目 将不 再 各自 存储 其 依赖 文件, 它们 只需 要 声明 这些 依赖 的 坐标, 在 需要 的 时候( 例如, 编译 项目 的 时候 需要 将 依赖 加入 到 classpath 中), Maven 会 自动 根据 坐标 找到 仓库 中的 构件, 并使 用 它们。

maven默认查找路径

本地-私服-远程仓库

生命周期

Maven 的 生命 周期 就是 为了 对 所有 的 构建 过程 进行 抽象 和 统一。 Maven 从 大量 项目 和 构建 工具 中 学习 和 反思, 然后 总结 了 一套 高度 完善 的、 易 扩展 的 生命 周期。 这个 生命 周期 包含 了 项目 的 清理、 初始化、 编译、 测试、 打包、 集成 测试、 验证、 部署 和 站点 生成 等 几乎 所有 构建 步骤。

Maven拥有三套独立的生命周期:

它们 分别为 clean、 default 和 site。 clean 生命 周期 的 目的 是 清理 项目, default 生命 周期 的 目的 是 构建 项目, 而 site 生命 周期 的 目的 是 建立 项目 站点。

clean 生命周期

1) pre- clean 执行 一些 清理 前 需要 完成 的 工作。

2) clean 清理 上一次 构建 生成 的 文件。

3) post- clean 执行 一些 清理 后 需要 完成 的 工作。

default 生命周期

default 生命 周期 定义 了 真正 构建 时 所需 要 执行 的 所有 步骤, 它是 所有 生命 周期 中最 核心 的 部分。像compile,test,package,install都是发生在这个时期内

site 生命周期

site 生命 周期 的 目的 是 建立 和 发布 项目 站点, Maven 能够 基于 POM 所 包含 的 信息, 自动 生成 一个 友好 的 站点, 方便 团队 交流 和 发布 项目 信息。

常见POM元素含义解释

·groupId: 项目 组 ID, 项目 坐标 的 核心 元素。

·version: 项目 版本, 项目 坐标 的 核心 元素。

·description: 项目 的 描述 信息。

·organization: 项目 的 组织 信息。

·inceptionYear: 项目 的 创始 年份。

·url: 项目 的 URL 地址。

·developers: 项目 的 开发者 信息。

·contributors: 项目 的 贡献者 信息。

·distributionManagement: 项目 的 部署 配置。

·issueManagement: 项目 的 缺陷 跟踪 系统 信息。

·ciManagement: 项目 的 持续 集成 系统 信息。

·scm: 项目 的 版本 控制系统 信息。

·mailingLists: 项目 的 邮件 列表 信息。

·properties: 自定义 的 Maven 属性。

·dependencies: 项目 的 依赖 配置。

·dependencyManagement: 项目 的 依赖 管理 配置。(常见于多模块项目中,用于锁定版本,子模块中仍需要引入具体依赖)

·repositories: 项目 的 仓库 配置。

·build: 包括 项 目的 源 码 目录 配置、 输出 目录 配置、 插件 配置、 插件 管理 配置 等。

·reporting: 包括 项目 的 报告 输出 目录 配置、 报告 插件 配置 等。

Maven学习书籍 maven学习国内第一本书 喜欢的可以下过来看个究竟哦 值得推荐 立即下载

相关推荐

maven权威指南英文原版

官方的maven权威指南原版书籍,关于maven使用有困惑的可以看一下,受益匪浅。

好书推荐-《Maven实战》

简介: 内容推荐 本书由国内社区公认的Maven专家Juven Xu亲自执笔,内容的权威性毋庸置疑。 本书是国内第一本公开出版的Maven专著。它内容新颖,基于最新发布的Maven 3.0,不仅详尽讲解了Maven 3.0的所有新功能和新特性,而且还将这些新功能和新特性与Maven 2.x版本进行了对比,以便于正在使用Maven 2.x版本的用户能更好地理解。本书它内容全面,以从专家的角度阐释Ma

青云学堂 7446

maven+mybatis书籍

maven书籍+mybatis书籍打包下载。可以点击下载,尽情学习交流

《Maven实战》读后感

目录一、一些思考1、为什么平时编写的Java项目也叫做Maven项目?2、平常的Java项目目录为什么长这样,可以改变目录结构吗?3、对于Maven项目来说,Maven能帮我们做什么?4、为什么一定需要Maven私服,不要行不行?5、为什么在执行mvn package之前必须要执行mvn clean呢?6、为什么在pom.xml中一般都会配置maven-compiler-plugin插件,并且设置source和target的值呢?7、如何配置pom.xml、settings.xml,才能把项目打成jar包推

qq_42449963的博客 1万+

maven电子书

自己留着看的电子书的个说,有《maven权威指南》的说。五十个字节好多的个说

Maven3实战笔记.pdf

Maven3实战笔记 Maven3实战笔记 Maven3实战笔记 Maven3实战笔记

Maven学习

书籍 《Maven实战》 《Maven权威指南中文版》 读书笔记 本来打算边看书边练习边做笔记,不用了,别人都写好了笔记,直接去看就好了,挑重点记录一下即可:) Maven实战学习笔记http://blog.youkuaiyun.com/zndxlxm/article/category/6176222 好吧,其实重点内容也都有人记录了: Maven常用命令http://...

anrao5234的博客 193

别再只当代码阅读器了!手把手教你用Understand的实体定位器和信息浏览器,5分钟精准定位代码逻辑

本文深入解析Understand代码分析工具的高级功能,重点介绍实体定位器和信息浏览器的实战应用。通过5分钟快速定位代码逻辑的技巧,帮助开发者从代码阅读者升级为逻辑侦探,提升大型代码库的分析效率。文章包含过滤搜索、调用链追踪等实用方法,是掌握Understand核心功能的必备指南。

weixin_28745821的博客 292

大佬们不会告诉你的史上最全的Java进阶书籍推荐

学习Java,书籍是必不可少的学习工具之一,尤其是对于自学者而言。废话不多说,下边就给大家推荐一些Java进阶的好书。 第一部分:Java语言篇 电子文档 1.《Java编程规范》 适合对象:初级、中级 电子文档 介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础的讲解很不错。 2.《Java编程思想》 适合对象:初级、中级 电子文档 介绍:豆瓣给出了9.1的评分,全球程序员广泛赞誉。有人说这本书不适合初学者,不过小编认为作者并没有对读者已有...

mid56579的博客 2141

数字IC后端新手必看:Innovus从安装到跑通第一个设计的完整流程(附常用命令清单)

本文为数字IC后端设计新手提供了Cadence Innovus工具的完整实战指南。详细介绍了从环境搭建、软件安装与许可证配置,到加载网表、库文件和约束,并逐步完成布局规划、单元布局、时钟树综合、布线及物理验证的核心使用流程。文章最后附有常用Tcl命令清单,帮助初学者快速上手并跑通第一个设计。

vscode5coder的博客 1239

Fluent基于低氧舱气体交换仿真(氮气与空气混合)

一、背景概述 模拟低氧舱充氮气和排除混合气体的过程,假设注入95%的氮气,舱内原有气体为空气,压力为标准大气压,温度为300K。观察气体注入过程中,舱内平均氮气和氧气浓度的变化。 二、Fluent设置 Setup 1、General type选择压力基 绝对速度 瞬态 重力勾选 2、Model 能量方程开启 组分运输开启,设置方法如下: 选择后OK,view就会变成Edit,点击Edit。然后再次点击Edit。 将组分中的非氮气氧气和空气的气体移除,右边选项需要将空气放在最后一位。 3、Materi

qq_35535616的博客 1万+

《Maven实战》读书笔记

之前对Maven有些认识,通过这本书《Maven实战》一起系统的回顾一下,总结的东西不会很全面,但都是日常工作中最常用的。简介:maven翻译为“知识的积累”,基于项目对象模型(Project Object Model, POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。优点如下:简化了项目依赖管理,通过坐标来管理依赖jar包。 易于上手,对于新手可能一个”mvn c

天森爱自由 559

从Power到HO:一文搞懂主流脑图谱在DPABI里怎么选,让你的rs-fMRI分析更精准

本文深入解析了rs-fMRI分析中主流脑图谱(如Power、HO、AAL等)在DPABI中的科学选择策略,帮助研究者根据不同的神经科学研究目标优化分析流程。从解剖学图谱到功能连接图谱的特性对比,到DPABI实操中的多图谱分析工作流,提供了全面的方法论指导,助力提升静息态功能磁共振成像(rs-fMRI)研究的精准度和可重复性。

weixin_30654583的博客 403

《Maven实战》 读书笔记

一、安装配置: 1、安装并配置好JDK; 2、从Apache下载适当版本的maven压缩包; 3、解压maven压缩包,放在适当位置,需要配置环境变量: M2_HOME:maven所在目录; PATH:%M2_HOME/bin; 还可以配置 MAVEN_OPTS,值为:-Xms128m -Xmx512m,调整mvn运行时内存。 二、安装目录分析: 1、bin:包含了mvn运行的脚本,其中mvn和...

fmasters的博客 218

微信小程序 - 详细解决web-view公众号文章或第三方网站分享转发后打开失败,页面显示“无法打开该页面,不支持打开“、“页面不存在“报错提示,苹果IOS系统手机打开是空白页,安卓手机系统会有提示!

微信小程序,公众号文章,第三方H5网页,内嵌网站分享后打不开,web-view,页面分享,小程序里公众号文章转发后无法打开,白屏,页面空白什么都没有,不支持打开,无法打开该页面,页面不存在,业务域名配置好了还是不行,公众号和小程序已经关联,iOS端苹果真机打开空白页,安卓手机,页面分享后,用户打不开提示错误,提示页面不存在,如何解决页面提示无法打开该页面,微信小程序web-view无法打开该页面不支持打开的解决方法,无法打开该页面不支持打开,最新详细解决方案,分享之后无法打开页面,提示无法打开该页面,不支持

🏆 前端领域优质创作者 1万+

初学者入门YOLO目标检测:从懵圈到上手,这篇文章讲透所有核心(附学习路径+避坑指南)

目标:比如训练一个“检测苹果和橘子”的模型,或者“检测人脸”的模型;任务:学会用LabelImg标注数据,制作YOLO格式的数据集,用命令行训练模型;关键:不用追求高精度,能训练出一个能检测出目标的模型就行。很多初学者卡在入门阶段,不是因为智商不够,而是因为“想太多,做太少”——总觉得要把所有原理搞懂才能动手,结果越想越怕,最后放弃。先动手,再动脑。先跑通一个案例,获得成就感;再制作自定义数据集,训练简单模型;最后再回头去理解原理,优化模型。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 690

maven:《Maven实战》读书笔记

《Maven实战》读书笔记

Yal_insist的博客 1074

DeepSeek+Cline:开启自动化编程新纪元

随着 AI 技术不断进步,编程领域迎来效率变革。DeepSeek 与 Cline 的结合,成为自动化编程的强大工具。DeepSeek 凭借先进的自然语言处理能力,能精准理解编程需求;Cline 作为 VSCode 插件,可实现代码生成、调试、注释等功能的无缝衔接。本文详细阐述二者安装配置、实战操作流程,涵盖从基础代码生成到复杂项目开发的应用技巧,同时解答常见问题,帮助开发者快速掌握这对 “智能搭档”,提升编程效率,解锁自动化编程的无限可能。

邓邓子的博客 6254

《maven实战》读书笔记

maven在实习之前没有用到过,实习期间用的比较多,感觉的确很不错。但是没有系统了解过maven,用起来总感觉不是特别顺手,于是买了《maven实战》,对maven比较陌生但是感兴趣的同学也可以参考这本书。 这本书可能是看的第一本工具书,过程是边看边实践,顺便把一些之前疑问的点给勾了出来,在这里记录一下。 第一章 maven简介 maven主要服务于基于Java平台的项目构建、依赖管

沈鸿斌的博客 878

【数据分享】12.5米分辨率DEM地形数据(分省)

该数据来源于NASA地球科学数据网站(https://nasadaacs.eos.nasa.gov/),是ALOS卫星获取的高精度地形数据。该数据由于精度高,包括全省范围的数据和省内每个城市范围的数据!

JData_Engineer的博客 2171

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

《Maven实战》之读书笔记

通常需要设置环境变量MAVEN_OPTS的值为-Xms128m -Xmx512m,因为java默认的最大可用内存往往不能够满足Maven运行的需要,在大项目中往往会出现内存不足,所以建议一开始就配置该变量是推荐做法。 新建一个maven工程后,项目的核心是pom.xml文件。 根元素下的第一个元素modelVersion指定了当前POM模型的版本,对于maven...

菩提本无树 明镜亦非台 本来无一物 何处惹尘埃 509

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

读书笔记之《maven实战》

最近重温了一遍,提炼了几个重要的知识点。详细的pom文件各个标签的解释 请看这pom标签解释 1、依赖传递和依赖的排除 依赖的传递:如果我们的项目引用了一个jar包,而jar包中又引用了其他的 jar包,那么在默认的项目编译的时候,maven会直接或者间接的引用的jar包都下载到本地 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包...

龙仞的博客 213

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 试图探索springboot自动配置实现原理
下一篇: Spring4实战读书笔记
努力~2019
博客等级 码龄10年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值