SpringBoot左脚进门之Maven管理家

ops/2024/12/17 1:25:17/

一、概念

Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化, 使开发团队用极少的时间就能够自动完成工程的基础构建配置。

Maven 简化了工程的构建过程,并对其标准化,提高了重用性。

  1. Maven 本地仓库 (Local Repository):
  • 每个开发者的计算机上都有一个本地仓库,用于存储下载的依赖库。
  • 本地仓库通常位于用户的 ~/.m2/repository 目录下(在 Windows 上通常是 C:\Users<username>.m2\repository)。
  1. Nexus 私服 (Private Repository):
  • Nexus 是一个流行的仓库管理工具,用于托管私有仓库。
  • 私有仓库可以存储企业内部的库,也可以作为中央仓库的缓存,提高下载速度。
  • 开发者通过 HTTP 访问 Nexus 私服,下载所需的依赖库。
  1. Maven 中央仓库 (Central Repository):
  • Maven 中央仓库是公共的、开源的库仓库,包含了大量开源项目的库。
  • 开发者可以通过 HTTP 访问 Maven 中央仓库,下载开源库。

工作流程:

  1. 开发者的 Maven 项目:
  • 开发者在本地计算机上使用 Maven 管理项目。
  • Maven 项目通过 pom.xml 文件定义依赖关系。
  1. 依赖查找:
  • 当 Maven 需要下载一个依赖库时,它首先检查本地仓库。
  • 如果本地仓库中没有该库,则 Maven 会尝试从 Nexus 私服下载。
  • 如果 Nexus 私服中也没有该库,则 Maven 会从 Maven 中央仓库下载,并将该库缓存到本地仓库和 Nexus 私服中。
  1. 配置文件:
  • settings.xml 文件用于配置 Maven 的全局设置,包括镜像、服务器认证信息等。
  • pom.xml 文件用于定义项目的构建配置和依赖关系。

具体步骤:

  1. 本地仓库检查:
  • Maven 首先检查本地仓库是否有所需的依赖库。
  1. Nexus 私服检查:
  • 如果本地仓库中没有,Maven 会尝试从 Nexus 私服下载。
  1. Maven 中央仓库检查:
  • 如果 Nexus 私服中也没有,Maven 会从 Maven 中央仓库下载,并将该库缓存到本地仓库和 Nexus 私服中。

二、Maven目录结构

根目录:工程名
|---src://源码
|---|---main: //存放主程序
|---|---|---java: //源码文件
|---|---|---resources: //存放框架的资源文件
|---|---test://存放测试程序
|---|---|---java: //java测试文件
|---|---|---resources: //java测试的资源文件
|---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>

三、仓库

Maven 仓库有两种类型:

  • 本地仓库(local):自己电脑上存储资源的仓库,通过连接远程仓库获取资源
  • 远程仓库(remote):非自己电脑上的仓库,为本地仓库提供资源
    • 中央仓库:Maven团队维护,存储所有资源的仓库
    • 私服:公司范围内存储资源的仓库,从中央仓库获取资源或自己的资源,仅对内部开放,不对外共享

本地仓库:

  1. 本地仓库说明:

Maven 本地仓库是机器上的一个文件夹,它在你第一次运行任何 maven 命令的时候创建。

Maven 本地仓库保存你的工程的所有依赖。当你运行一次 Maven 构建命令,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。

  1. 本地仓库存放位置

本地仓库默认被创建在 C:\Users\用户名.m2\ 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 settings.xml 文件中定义另一个路径。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>${user.home}/.m2/repository</localRepository>
</settings>

中央仓库:

Maven 中央仓库是由 Maven 社区提供的仓库。

//设置成功后,会从阿里的镜像库中获取依赖,不会从 Maven 中央仓库中获取依赖了。<!--添加如下配置:设置阿里镜像库-->
<mirror><id>ali</id><name>ali Maven</name><mirrorOf>*</mirrorOf><url>https://maven.aliyun.com/repository/public/</url>
</mirror>

私服:

私服是一种在公司内部或局域网中使用的远程仓库。它通常由公司自己搭建,用于存储公司内部开发的库和插件,也可以从中央仓库或其他远程仓库获取依赖。私服可以加快公司内部项目的构建速度,同时也可以避免外部网络不稳定对项目构建的影响。

四、坐标和依赖

<dependency><!--工程组的标识,它在一个组织或者项目中通常是唯一的,公司或域名倒序+项目名--><groupId>mysql</groupId><!--工程的名称,模块名--><artifactId>mysql-connector-java</artifactId><!--工程的版本号--><version>8.0.31</version>
</dependency>groupId:这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。artifactId:这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。version:这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version><!--scope标签代表指定依赖范围--><scope>runtime</scope></dependency>
</dependencies>compile:默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段;runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段;test:只在测试时使用,用于编译和运行测试代码,不会随项目发布;provided:只在开发、测试阶段使用。

五、Maven生命周期命令

命令作用
mvn compile编译主程序 src/main
,生成target目录,存放编译主程序生成的字节码文件,输出到 target/classes
mvn test-compile编译测试程序 src/main
,生成target目录,存放编译主程序生成的字节码文件,输出到 target/classes
mvn test编写的测试代码并生成测试报告(目前对于后端开发没有太大作用)
mvn package将项目打成jar包
mvn clean清空项目本地编译目录
mvn install将项目 安装到本地仓库(多个项目相互依赖 相互使用时.)

这是最常用的生命周期,用于编译、测试、打包和部署项目。它的典型阶段包括:

  • validate:验证项目的正确性以及所有必要的信息是否可用。
  • compile:编译项目的源代码。
  • test:使用合适的单元测试框架(如 JUnit)运行测试,但不包含生成的测试代码。
  • package:将编译后的代码打包成可分发格式,如 JAR 或 WAR 文件。
  • verify:对集成测试的结果进行检查,确保质量标准得到满足。
  • install:将包安装到本地仓库,以便其他本地项目可以依赖它。
  • deploy:在集成或发布环境中完成,将最终的包复制到远程仓库中。

http://www.ppmy.cn/ops/142509.html

相关文章

淘宝详情网页爬虫:技术解析与实战指南

引言 淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的商品数据。对于开发者来说&#xff0c;获取淘宝商品详情接口是一个常见的需求。本文将介绍如何使用Python编写爬虫&#xff0c;获取淘宝商品详情信息&#xff0c;并探讨在实际应用中可能遇到的挑战与解决方案。 环…

Element Plus Table 组件树形渲染实现方法

Element Plus的Table组件通过指定列表数据的children属性&#xff0c;实现树形数据的渲染&#xff1b;同时使用row-key标识唯一的行&#xff0c;依赖排序和子节点数据结构&#xff0c;以实现连动操作。 重要的设置有&#xff1a; 树形渲染配置项&#xff1a; 通过tree-props 配…

nodeJS转换视频格式

系统需要先安装 FFmpeg Download FFmpeg node安装模块 npm install fluent-ffmpeg 使用示例 把 wmv 格式转换 mp4 格式 const ffmpeg require(fluent-ffmpeg) const path require(path)function convertWmvToMp4(inputPath, outputPath) {ffmpeg(inputPath).output(outputP…

React基础学习

React基础 &#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️点开就是缘分认识一下&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#x…

Vue3之响应式系统详解

Vue3中的响应式系统是其核心功能之一&#xff0c;它使得数据变化能够自动触发视图更新&#xff0c;从而简化了开发过程&#xff0c;提高了开发效率。本文将详细阐述Vue3中的响应式系统&#xff0c;包括其核心概念、工作原理、实现方式、应用场景以及优势。同时&#xff0c;本文…

web自动化测试框架playwright

一、背景&#xff1a;UI自动化的痛点&#xff1a; 1、设计脚本耗时&#xff1a; 需要思考要如何模拟用户的操作&#xff0c;如何触发页面的事件&#xff0c;还要思考如何设计脚本&#xff0c;定位和操作要交互的元素、路径、位置&#xff0c;再编写代码逻辑&#xff0c;往复循…

庆祝 2024 年的开源:热门项目和里程碑

随着 2024 年接近尾声&#xff0c;开源社区有很多值得庆祝的事情。今年展示了集体创新的巨大潜力&#xff0c;各行各业都涌现了开创性项目。从 AI 和可持续性到软件开发和创意工具&#xff0c;开源再次证明了其变革的力量。让我们回顾一下今年的主要亮点以及定义 2024 年开源的…

全球叉车市场 2023 - 2032 年发展趋势:自动化、电商与电动叉车的崛起

全球叉车市场到2032年将达到955.1亿美元&#xff0c;年复合增长率为7.49% | Astute Analytica 全球叉车市场正迎来显著增长&#xff0c;市场估值预计将从2023年的498.6亿美元增长至2032年的955.1亿美元&#xff0c;预测期内年复合增长率&#xff08;CAGR&#xff09;为7.49%。这…