当前位置: 首页 > article >正文

Java小白-管理项目工具Maven(3)Ma

一、pom.xml文件

pom.xml 文件是 Maven(Apache Maven)项目的核心配置文件,它定义了项目的构建、依赖管理和项目元数据等信息。Maven 是一个流行的 Java 项目管理和构建自动化工具,而 pom.xml 是 Maven 项目中不可或缺的一部分。

pom.xml 文件中定义了项目所需的依赖库。Maven 会根据这些依赖配置自动下载并管理这些依赖库。依赖管理是 Maven 的核心功能之一,它使得开发者能够轻松地管理项目所需的外部库,而无需手动下载和配置。

二、坐标

1、Maven 坐标啥意思,能干啥

它用于唯一标识一个 Maven 项目或依赖。Maven 坐标由以下三个主要部分组成:groupIdartifactIdversion。这三个部分共同定义了一个 Maven 项目的唯一身份。

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

2、Maven 坐标的三个主要部分是啥

  1. groupId

    • 作用:定义项目的组 ID,通常是一个反向域名,用于区分不同的项目或组织。

    • 示例com.example。这表示项目属于 com.example 这个组织或公司。

    • 重要性groupId 是项目所属组织的唯一标识,用于避免不同组织之间的项目名称冲突。

  2. artifactId

    • 作用:定义项目的唯一标识符,通常是一个项目名称。

    • 示例example-project。这表示项目名称为 example-project

    • 重要性artifactId 是项目在所属组织中的唯一标识,用于区分同一组织下的不同项目。

  3. version

    • 作用:定义项目的版本号,用于区分不同版本的项目。

    • 示例1.0.0。这表示项目当前的版本是 1.0.0

    • 重要性version 是项目版本的唯一标识,用于管理项目的不同版本,确保依赖的正确性。

 三、依赖

1、依赖的意义

  • 代码复用:就好像我们组装车时都需要轮子,但是我们每次从橡胶、螺丝开始也太麻烦了,为了避免重复造轮子,提高开发效率,依赖允许开发者复用已有的代码库拿来使用
  • 功能扩展:通过引入依赖,项目可以扩展新的功能,如数据库访问、Web 开发、安全性等。
  • 版本管理:依赖管理工具可以帮助开发者管理不同版本之间的兼容性问题,确保项目稳定运行。
  • 构建自动化:自动化构建工具可以自动下载和配置依赖,简化了构建过程。

2、依赖的使用

在 Maven 中,依赖通常在 pom.xml 文件的 <dependencies> 部分进行配置。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.0</version></dependency>
</dependencies>

3、第三方依赖的查找方法

  • Maven 中央仓库

    • Maven 中央仓库是最大的公共 Maven 仓库,包含了大量的开源项目和库。

    • 可以通过访问 Maven Central 搜索依赖。

  • 项目文档

    • 许多开源项目在其文档中会列出所需的依赖,可以直接从文档中获取依赖信息。

  • IDE 插件

    • 许多集成开发环境(IDE)如 IntelliJ IDEA、Eclipse 等,都提供了 Maven 插件,可以直接在 IDE 中搜索和添加依赖。

  • 社区和论坛

    • 在 Stack Overflow、GitHub 等社区和论坛中,可以找到关于特定依赖的讨论和推荐。

  • 依赖管理工具

    • 一些工具如 Spring Initializr 可以帮助快速生成包含所需依赖的 Spring Boot 项目。

  • 版本管理工具

    • 使用如 Semantic Versioning 等版本管理工具,可以帮助选择合适的依赖版本。

 四、依赖范围

依赖范围描述是否传递是否包含在最终构建中典型用途
compile默认范围,编译、测试和运行时都需要项目的主要依赖,如 Spring Boot 启动器
provided编译和测试时需要,运行时由环境提供×需要由 JRE 或者应用服务器提供的依赖,如 Servlet API
runtime编译时不需要,测试和运行时需要运行时需要但编译时不需要的依赖,如数据库驱动
test仅在测试时需要××测试框架和测试相关的库,如 JUnit
system编译、测试和运行时都需要,需要手动指定本地路径系统路径下的库,不推荐使用,因为它降低了项目的可移植性
import导入一个 POM 文件作为当前 POM 的一部分××用于导入一个外部的 POM 文件,如 Maven 插件的 POM
  • 是否传递:表示该依赖范围是否会传递给依赖于当前项目的其他项目。例如,如果一个 compile 范围的依赖引入了一个 runtime 范围的依赖,那么这个 runtime 范围的依赖也会被打包到最终的 JAR 文件中。

  • 是否包含在最终构建中:表示该依赖范围是否包含在最终的构建产物中,如 JAR 文件或 WAR 文件。

  • 典型用途:表示该依赖范围的典型使用场景。

  1. compile

    • 默认的依赖范围。

    • 编译、测试和运行时都需要的依赖。

    • 会被打包到最终的 JAR 文件中。

  2. provided

    • 编译和测试时需要,但运行时由容器或运行环境提供。

    • 不会被打包到最终的 JAR 文件中。

    • 适用于如 Servlet API 这样的依赖,它们在运行时由 Web 容器提供。

  3. runtime

    • 编译时不需要,但测试和运行时需要的依赖。

    • 不会被打包到最终的 JAR 文件中。

    • 适用于如数据库驱动这样的依赖,它们在运行时需要,但在编译时不需要。

  4. test

    • 仅在测试时需要的依赖。

    • 不会被打包到最终的 JAR 文件中。

    • 适用于如 JUnit 这样的测试框架。

  5. system

    • 编译、测试和运行时都需要的依赖。

    • 需要手动指定依赖的本地路径。

    • 不推荐使用,因为它使得项目依赖于本地文件,降低了可移植性。

五、依赖传递和可选依赖

在Spring Boot项目中,依赖传递是Maven和Gradle等构建工具的一个重要特性。当一个项目依赖某个库时,这个库所依赖的其他库(传递依赖)也会自动被包含进来。

依赖传递的特点

  1. 自动解析‌:构建工具会自动解析并下载所有传递依赖
  2. 依赖树‌:可以通过mvn dependency:tree命令查看完整的依赖关系树
  3. 版本仲裁‌:当多个依赖对同一库有不同版本要求时,构建工具会选择一个版本(通常是最新版本)

Spring Boot中的依赖管理

Spring Boot通过spring-boot-starter-parentspring-boot-dependencies提供了依赖管理功能:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version>
</parent>

这确保了所有Spring Boot相关依赖的版本兼容性。

可选依赖(Optional Dependencies)

可选依赖是一种标记机制,表示某个依赖不是项目运行所必需的。

可选依赖的特点
  1. 不自动传递‌:标记为optional的依赖不会被自动传递给依赖当前项目的其他项目
  2. 显式声明‌:使用方需要显式声明这些依赖
  3. 适用场景‌:适用于只在特定环境下需要的依赖

在Maven中声明可选依赖

<dependency><groupId>com.example</groupId><artifactId>optional-library</artifactId><version>1.0.0</version><optional>true</optional>
</dependency>
实际应用场景
  1. 数据库驱动‌:项目可能支持多种数据库,但用户只需要其中一种

    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><optional>true</optional>
    </dependency>
    <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><optional>true</optional>
    </dependency>
    

  2. 特定功能模块‌:某些功能只在特定环境下需要

  3. 测试依赖‌:测试相关的依赖通常不应传递到生产环境

依赖冲突解决

当出现依赖冲突时,可以:

  1. 使用<exclusions>排除特定传递依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions>
    </dependency>
    

  2. 显式声明所需版本,覆盖传递依赖的版本

  3. 使用Maven的dependencyManagement统一管理版本

相关文章:

Java小白-管理项目工具Maven(3)Ma

一、pom.xml文件 pom.xml 文件是 Maven&#xff08;Apache Maven&#xff09;项目的核心配置文件&#xff0c;它定义了项目的构建、依赖管理和项目元数据等信息。Maven 是一个流行的 Java 项目管理和构建自动化工具&#xff0c;而 pom.xml 是 Maven 项目中不可或缺的一部分。 …...

C++中的多态和模板

#include <iostream> #include <cstdlib> #include <ctime> #include <string>using namespace std;// 武器基类 class Weapon { public:virtual ~Weapon() {}virtual string getName() const 0; // 获取武器名称virtual int getAtk() const 0; …...

Java 类型转换和泛型原理(JVM 层面)

一、类型转换 概念解释&#xff1a; 编译类型&#xff1a;在编译时确定&#xff0c;保存在虚拟机栈的栈帧中的局部变量表中&#xff1b; 运行类型&#xff1a;在运行时确定&#xff0c;由保存在局部变量表中变量指向的堆中对象实例的类型决定&#xff08;存储在对象头中&…...

Wireshark 安装保姆教程(图文详解)

一、Wireshark 简介 Wireshark是使用最广泛的一款开源抓包软件&#xff0c;常用来检测网络问题、攻击溯源、或者分析底层通信机制。它使用WinPCAP作为接口&#xff0c;直接与网卡进行数据报文交换&#xff0c;它支持在 Windows、Mac OS、Linux 等多种主流操作系统上运行 &…...

下载安装Node.js及其他环境

提示&#xff1a;从Node版本降级到Vue项目运行 文章目录 下载Node.js环境配置配置环境变量 安装 cnpm&#xff08;我需要安装&#xff09;安装脚手架安装依赖安装淘宝镜像&#xff08;注意会更新&#xff09;cnpm vs npm 与新旧版本核心差异包管理器不同功能差异如何选择&#…...

机器视觉3D中激光偏镜的优点

机器视觉的3D应用中,激光偏镜(如偏振片、波片、偏振分束器等)通过其独特的偏振控制能力,显著提升了系统的测量精度、抗干扰能力和适应性。以下是其核心优点: 1. 提升3D成像精度 抑制环境光干扰:偏振片可滤除非偏振的环境杂光(如日光、室内照明),仅保留激光偏振信号,大…...

MyBatis Plus 在 ZKmall开源商城持久层的优化实践

ZKmall开源商城作为基于 Spring Cloud 的高性能电商平台&#xff0c;其持久层通过 MyBatis Plus 实现了多项深度优化&#xff0c;涵盖分库分表、缓存策略、分页性能、多租户隔离等核心场景。以下是具体实践总结&#xff1a; 一、分库分表与插件集成优化 1. 分库分表策略 ​Sh…...

rust 同时处理多个异步任务,并在一个任务完成退出

use std::thread; use tokio::{sync::mpsc,time::{sleep, Duration}, };async fn check_for_one() {// 该函数会每秒打印一次 "write"loop {println!("write");sleep(Duration::from_secs(1)).await;} }async fn start_print_task() -> Result<(), (…...

使用注解开发springMVC

引言 在学习过第一个springMVC项目建造过后&#xff0c;让我们直接进入真实开发中所必需的注解开发&#xff0c; 是何等的简洁高效&#xff01;&#xff01; 注&#xff1a;由于Maven可能存在资源过滤的问题&#xff0c;在maven依赖中加入 <build><resources>&l…...

深入解析 Java 8 Function 接口:函数式编程的核心工具

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Java 8 引入的 java.util.function.Function 接口是函数式编程范式的核心组件之一&#xff0c;本文将全面解析其使用方法&#xff0c;并通过丰富的代码示例演…...

【Axure元件分享】时间范围选择器

时间范围选择器下拉选择开始时间和结束时间&#xff0c;实现效果如下。 源文件截图&#xff1a; 元件获取方式&#xff1a;...

【Linux操作系统——学习笔记三】Linux环境下多级目录构建与管理的命令行实践报告

1.在用户主目录下&#xff0c;使用以下方法新建目录&#xff0c;并显示详细执行过程&#xff1a; &#xff08;1&#xff09;使用绝对路径在当前目录下创建 new_dir目录 &#xff08;2&#xff09;使用相对路径、在当前目录创建dir1、dir2、dir3目录 &#xff08;3&#xff09…...

Mysql 中的两阶段提交

MySQL 中的“两阶段提交”&#xff08;Two-Phase Commit&#xff0c;2PC&#xff09;是用于分布式事务中的一种协议&#xff0c;目的是保证在多个数据库节点之间操作的一致性。虽然 MySQL 自身并不是分布式数据库&#xff0c;但在 使用 InnoDB 引擎和 binlog 的情况下&#xff…...

Scade One - 将MBD技术从少数高安全领域向更广泛的安全嵌入式软件普及

Scade One是继Scade Suite version 6自2008年起发展近20年后的首次主要改进版本。在Scade One发布的同时&#xff0c;Scade团队发布了一系列介绍Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的内容中&#xff0c;将复述博客…...

C# 与 相机连接

一、通过组件连接相机 需要提前在VisionPro里面保存一个CogAcqFifoTool相机工具为 .vpp 定义一个相机工具 CogAcqFifoTool mAcq null;将保存的相机工具放入mAcq中 string path “C:\Acq.vpp”; mAcq (CogAcqFifoTool)CogSerializer.LoadObjectFrommFile(path);给窗口相机…...

JAVA学习小记之IO流04--转换流篇

转换流: 按照A规则存储&#xff0c;同样按照A规则解析&#xff0c;那么就能显示正确的文本符号。反之&#xff0c;按照A规则存储&#xff0c;再按照B规则解析&#xff0c;就会导致乱码现象。 转换的原因是&#xff1a; 有的文件并非是按UTF-8编码&#xff0c;那么在读文件内容…...

SH 和 BASH 有什么不同 ?

当谈到 shell 脚本编写时&#xff0c;经常出现两个突出的 shell&#xff0c;Bourne shell (SH) 和 Bourne Again shell (Bash)。两者都是基于 unix 和 linux 的系统的组成部分&#xff0c;提供与操作系统交互的接口。本文旨在深入研究这两种 shell 之间的复杂差异&#xff0c;揭…...

linux专题3-----linux上链接远程mysql

要在 Ubuntu 上连接远程 MySQL 数据库&#xff0c;你可以使用 MySQL 客户端工具或者其他数据库管理工具&#xff0c;如 phpMyAdmin 或 MySQL Workbench。以下是使用 MySQL 命令行工具连接远程 MySQL 的步骤&#xff1a; 确保已安装 MySQL 客户端 首先&#xff0c;确保你的 Ub…...

Qt 音乐播放器项目

具体代码见&#xff1a;https://gitee.com/Suinnnnnn/MusicPlayer 文章目录 0. 预备1. 界面1.1 各部位长度1.2 ui文件1.3 窗口前置设置1.4 设置QSS 2. 自定义控件2.1 按钮2.2 推荐页面2.3 CommonPage2.4 滑杆 3. 音乐管理4. 歌词界面4.1 ui文件4.2 LrcPage.h文件 5. 音乐播放控…...

类似于langchain的开发框架有哪些?

类似于 LangChain 的开发框架主要用于构建基于大语言模型&#xff08;LLM&#xff09;的应用程序&#xff0c;提供链式调用、工具集成、记忆管理等功能。以下是一些类似的框架和工具&#xff1a; 1. LlamaIndex&#xff08;原GPT Index&#xff09; 特点&#xff1a;专注于文档…...

IntelliJ IDEA中Spring Boot 3.4.x+集成Redis 7.x:最新配置与实战指南

‌前言 Spring Boot 3.4.x作为当前‌最新稳定版本‌&#xff0c;全面支持Java 17与Jakarta EE 10规范。本文以‌Spring Boot 3.4.1‌和‌Redis 7.x‌为例&#xff0c;详解如何在IDEA中快速接入Redis&#xff0c;涵盖‌最新依赖配置‌、‌数据序列化优化‌、‌缓存注解‌及‌高…...

【mongodb】MongoDB的应用场景

目录 1.说明2.内容管理系统&#xff08;CMS&#xff09;2.1 场景描述2.2 MongoDB优势2.3 示例 3.实时分析与大数据3.1 场景描述3.2 MongoDB优势3.3 示例 4.移动应用后端4.1 场景描述4.2 MongoDB优势4.3 示例 5.游戏开发5.1 场景描述5.2 MongoDB优势5.3 示例 6.电子商务平台6.1 …...

.NET用C#在PDF文档中添加、删除和替换图片

在当今数字化文档处理场景中&#xff0c;动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一。通过C#在.NET平台实现图片的添加、替换和删除功能&#xff0c;不仅能显著提升PDF文档的视觉表现力与信息承载效率&#xff0c;更可满足数据动态更新、内容精准维护等复杂业…...

Linux文件操作命令详解

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在Linux操作系统中,文件操作命令是用户与系统交互的重要工具。掌握这些命令能够高效地管理文件和目录。本文将详细介绍常用的Linux文件操作命令,包括它们的用法、选项、具体示例及运行结果。 1. 查看文…...

anaconda安装使用+pytorch环境配置(cpu)+pycharm环境配置(详细教程)

一、anaconda下载 1.anaconda官网尝试下载&#xff1a; 官网网址&#xff1a;Anaconda | Built to Advance Open Source AI 1.进入官网 2.点击Products->Distribution&#xff0c;跳过注册进入下载页面 3.选择系统下载 2.清华镜像下载 1.网址&#xff1a;Index of /anac…...

c++STL入门

目录 什么是STL&#xff1f; vector容器 构造函数 赋值操作 vector容量和大小 vector存放内置数据类型 vector存放自定义数据类型 存放指针 vector容器嵌套容器 string容器 构造函数 赋值操作 字符串拼接 查找和替换 string字符串比较 string字符存取 string插…...

electron-update + nginx热更新

1.安装"electron-updater": “^6.6.2”, npm i electron-updater2.创建checkUpdate.js // 引入自动更新 const {autoUpdater} require(electron-updater); const { dialog } require(electron); // 自动更新检查 export function checkForUpdates() {// 检查新版…...

SpringMVC与SpringCloud的区别

SpringMVC与SpringCloud的核心区别 功能定位 • SpringMVC&#xff1a; 基于Spring框架的Web层开发模块&#xff0c;采用MVC&#xff08;Model-View-Controller&#xff09;模式&#xff0c;专注于处理HTTP请求、路由分发&#xff08;如DispatcherServlet&#xff09;和视图…...

【动态规划】P8638 [蓝桥杯 2016 省 A] 密码脱落

题解&#xff1a;P8638 [蓝桥杯 2016 省 A] 密码脱落 题目传送门&#xff1a;P8638 密码脱落 一、题目描述 考古学家发现了一些由 A、B、C、D 四种种子组成的密码串&#xff0c;这些串原本是回文串&#xff08;前后对称&#xff09;&#xff0c;但由于部分种子脱落&#xff…...

PyTorch池化层详解:原理、实现与示例

池化层&#xff08;Pooling Layer&#xff09;是卷积神经网络中的重要组成部分&#xff0c;主要用于降低特征图的空间维度、减少计算量并增强模型的平移不变性。本文将通过PyTorch代码演示池化层的实现原理&#xff0c;并详细讲解最大池化、平均池化、填充&#xff08;Padding&…...