SpringBoot左脚进门之Maven管理家

一、概念

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目录结构

java 复制代码
根目录:工程名
|---src://源码
|---|---main: //存放主程序
|---|---|---java: //源码文件
|---|---|---resources: //存放框架的资源文件
|---|---test://存放测试程序
|---|---|---java: //java测试文件
|---|---|---resources: //java测试的资源文件
|---pom.xml://maven的核心配置文件
java 复制代码
<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 文件中定义另一个路径。

java 复制代码
<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 社区提供的仓库。

java 复制代码
//设置成功后,会从阿里的镜像库中获取依赖,不会从 Maven 中央仓库中获取依赖了。

<!--添加如下配置:设置阿里镜像库-->
<mirror>
    <id>ali</id>
    <name>ali Maven</name>
    <mirrorOf>*</mirrorOf>
    <url>https://maven.aliyun.com/repository/public/</url>
</mirror>

私服:

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

四、坐标和依赖

java 复制代码
<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
java 复制代码
<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:在集成或发布环境中完成,将最终的包复制到远程仓库中。
相关推荐
他҈姓҈林҈3 小时前
使用 Spring Boot 进行开发
spring boot
柏油5 小时前
MySQL InnoDB 行锁
数据库·后端·mysql
咖啡调调。5 小时前
使用Django框架表单
后端·python·django
Java&Develop5 小时前
onloyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
前端·spring boot·编辑器
白泽talk5 小时前
2个小时1w字| React & Golang 全栈微服务实战
前端·后端·微服务
摆烂工程师5 小时前
全网最详细的5分钟快速申请一个国际 “edu教育邮箱” 的保姆级教程!
前端·后端·程序员
一只叫煤球的猫6 小时前
你真的会用 return 吗?—— 11个值得借鉴的 return 写法
java·后端·代码规范
Asthenia04126 小时前
HTTP调用超时与重试问题分析
后端
颇有几分姿色6 小时前
Spring Boot 读取配置文件的几种方式
java·spring boot·后端
AntBlack6 小时前
别说了别说了 ,Trae 已经在不停优化迭代了
前端·人工智能·后端