Maven的顶级功能——依赖管理
依赖管理
依赖管理解决的问题
我们学完一个语言的语法之后,我们应该都能知道函数的引用或者类的创建等了。为了方便管理,我们就会把一些特定的功能实现写在一个代码文件中,我们只需要使用的时候导入就行了,这样无论是修改还是阅读都更加的方便简洁,但这样会出来一个问题,一旦我们多个文件你引用我,我引用你,就会出现蜈蚣一般的嵌套(比如A引用B,B引用C),这样我们迁移或者打包的整个项目的时候就会很复杂,整个引用宛如迷宫一般,人工来管理就会很麻烦。这个时候Maven就能解决这个问题
Maven的作用
当我们声明了A的依赖的时候,Maven会自己判断这个模块和其他被引用的模块是否还有其他的依赖,如果有,就会自动导入其他的依赖,不用我们去判断是否有其他的依赖了。那我们怎么声明呢,就是在pom.xml
这文件里面
pom.xml
pom.xml
这个文件很有用,是项目的maven的配置文件,我们来仔细看看这个文件
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itranswarp.learnjava</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>17</maven.compiler.release>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
</dependency>
</dependencies>
</project>
我们来梳理一下整文件的结构:
我们可以分为几个大块
<project ...>
- 是
pom.xml
的根元素,包含了所有项目的配置信息。 - 定义了命名空间和模式,确保文件遵循 Maven POM 规范。
<project ...>
所有项目的配置信息。
</project>
整个项目自己的信息
<modelVersion>4.0.0</modelVersion>
<groupId>com.itranswarp.learnjava</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
这些都是你管理项目的信息
一个Maven工程就是由groupId
,artifactId
和version
作为唯一标识。
<modelVersion>
- 定义 POM 文件的模型版本,目前通常为
4.0.0
。
<groupId>
- 表示项目的组 ID,通常是项目所属组织的反向域名(如
com.example
)。 - 必须唯一,通常用来标识公司或组织。
<artifactId>
- 项目的唯一标识符,表示模块或项目的名称(如
my-app
)。 -
artifactId
应该在同一groupId
下是唯一的。
<version>
- 定义项目的版本号(如
1.0.0
)。 - 如果是开发版本,可以使用
-SNAPSHOT
标识(如1.0.0-SNAPSHOT
),表示不稳定版本。
<packaging>
- 指定项目的打包方式,默认为
jar
。 - 其他常见值有
war
(Web 应用)、pom
(父项目)等。
<properties..>
这个标签里面是统一管理版本号、编码等配置。
-
project.build.sourceEncoding
:表示项目源码的字符编码,通常应设定为UTF-8
; -
maven.compiler.release
:表示使用的JDK版本,例如21
; -
maven.compiler.source
:表示Java编译器读取的源码版本; -
maven.compiler.target
:表示Java编译器编译的Class版本。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>17</maven.compiler.release>
</properties>
值得注意的是
从Java 9开始,推荐使用maven.compiler.release
属性,保证编译时输入的源码和编译输出版本一致。如果源码和输出版本不同,则应该分别设置maven.compiler.source
和maven.compiler.target
。
通过<properties>
定义的属性,就可以固定JDK版本,防止同一个项目的不同的开发者各自使用不同版本的JDK。
<dependencies..>
这里面就是整个项目所需的依赖
定义项目的依赖项,每个依赖项用
<dependency>
标签表示。<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
</dependency>
</dependencies>
关键字元素:
-
<groupId>
:依赖的组 ID。 -
<artifactId>
:依赖的 artifact ID。 -
<version>
:依赖的版本号。
-
我们在引用其他第三方库的时候,只需要通过这3个变量确定。例如,依赖org.slfj4:slf4j-simple:2.0.16
:这个依赖是我们可以直接在线下载下来直接调用的,解析下来就是
groupId
为 org.slfj4
artifactId
为slf4j-simple
version
为 2.0.16
一般我们在表示Maven依赖时,使用简写形式groupId:artifactId:version
这个时候回去看pom.xml
我们就发现整个结构已经非常清晰了,就是各种配置的结合体
xml
既然提到了,那我们就顺便介绍一遍xml这个格式吧,通过上面的例子我们能看出xml是非常像html的语法的,但是xml有着很高的自由度,因为xml的本意就是靠着这样的层级信息去表达主题各式各样的信息
这样的表示优点就是非常的结构化,结构化对于整个计算机的信息表示无疑是非常契合和高效的
xml的表示既非常地公式化,使用<>
来将这个盒子命名就行,里面随便输入信息就行,因为xml的功能就像文章一样,只是用来看的。也非常的灵活,每个<>
都可以进行嵌套
Maven的顶级功能——依赖管理的更多相关文章
- Maven多模块项目依赖管理
Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...
- 实用maven笔记二-信息&依赖管理
目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...
- maven学习记录二——依赖管理
5 依赖管理 Jar包的管理 需求:整合struts2 页面上传一个客户id 跳转页面 5.1 添加依赖: 打开maven仓库的视图: 5.2 重建索引 1. 创建m ...
- maven——项目构建和依赖管理工具
apache maven是一个用于项目构建和依赖管理的工具. 添加archetype https://repo1.maven.org/maven2/archetype-catalog.xml 更改本地 ...
- 【maven】插件和依赖管理
1.插件管理 定义 pluginManagement 用来做插件管理的.它是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManage ...
- 使用maven-pom进行依赖管理与自动构建
使用maven-pom进行依赖管理与自动构建 span.kw { color: #007020; font-weight: bold; } /* Keyword */ code > span.d ...
- 4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念
1 maven概念模型 2 maven的生命周期,项目构建过程 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg== ...
- Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理
原文链接: Spring Security with Maven原文日期: 2013年04月24日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述 本文通过实例为您介绍怎样使用 Mave ...
- Maven(六)之依赖管理
前面讲了maven一些关于Maven的简单知识,今天我给大家分享一些Maven的依赖管理.我相信用过maven的人都知道,它很重要的功能就是通过依赖来添加jar包. 让我们领略一下Maven是怎么管理 ...
- 从初识Maven到使用Maven进行依赖管理和项目构建
前些天就安装了Maven,以备自己以后整合项目用,尤其是我们的ssh,ssm项目.想必好多人在开始的时候并不清楚Maven是什么,它能够帮助我们干什么. 所以在学习Maven之前我们一定要知道它是什么 ...
随机推荐
- leetcode第 109 场双周赛
6930. 检查数组是否是好的 - 力扣(LeetCode) 首先判断数组长度是不是最大值 + 1, 然后排个序,判断0到n - 2是不是都是1到最大值的一个排列,满足这些返回true就行了 clas ...
- Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程 Xorbits Inference (Xinference) 是一个开源平台,用 ...
- 从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3
上一篇我们已经讲了如何搭建一个多线程的服务器模型,可以支持多个客户端同时连接服务器,本篇我们来实现多个客户端,如何实现向服务器注册信息,并实现登录的功能. 数据结构 接着上一篇的实例代码继续增加功能. ...
- poi的excel导出
poi的excel导出 这个导出依赖于模板文件,可便捷设置表头样式. 也可以不使用模板,直接创建. 1.引入poi依赖 <dependency> <groupId>org.ap ...
- 逆向WeChat (五)
本篇逆向mmmojo.dll,介绍如何使用mmmojo,wmpf_host_export的mojo. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18216717 ...
- 2023/11/15 NOIP 模拟赛
T1 游戏 标签 尺取 线段树 单调队列 线段树进阶 思路 抽象题意,相当于有 \(t\) 个点,有 \(n\) 个下接 \(x\) 轴的矩形. 首先明显可以按照 \(c\) 排序,然后尺取. 写法 ...
- Spring —— 注解开发(管理第三方bean)
第三方bean管理 第三方bean依赖注入
- Hive 2.3.2安装
一.安装mysql 安装MySQL服务器端和MySQL客户端: •安装: – yum install mysql – yum install mysql-server •启动: – /etc/init ...
- Flutter将视频或图文分享到抖音
如何在 Flutter 中分享视频到抖音 话不多说,先上效果: 原理 发布内容至抖音 H5 场景_移动/网站应用_抖音开放平台 (open-douyin.com) 本教程没有接入抖音原生 SDK 以及 ...
- NICE与静态优先级的关系
在Linux系统中,nice值和静态优先级用于控制进程调度的优先级,但它们的范围和含义有所不同.让我们详细解释一下两者的区别和联系. 1. Nice值 范围:nice值的范围是从 -20 到 19. ...