Maven

目录

一、创建一个Maven项目

二、Maven在项目开发中的核心功能

1、项目构建

2、管理依赖

依赖传递

依赖排除

依赖调节、可选依赖

步骤

原理

Maven设置国内源

修改Maven目录的地址


Maven是一个项目管理工具,主要用于构建项目(清理、编译、测试、运行、打包和安装等过程)

一、创建一个Maven项目

IDEA本身已经集成了Maven,所以可以直接使用,无需安装

目录结构:

二、Maven在项目开发中的核心功能

1、项目构建

Maven提供了标准的、跨平台(Linux、Windows、MacOS等)的自动化项目构建方式,包括清理、编译、测试、运行、打包和安装、生成文档等过程

在Java开发中,打包通常指的是将所有的Java源文件、配置文件和资源文件压缩到一个文件中,形成一个可执行的单位。通过定义pom.xml文件中的构建配置<build>,可以轻松执行各种构建任务

pom.xml是maven的配置文件,用以描述项目的各种信息

打包生成的文件通常是Jar包或War包,这些包包含了运行应用程序所需的类和资源。

打好的Jar包就可以引入到其他项目中,也可以直接使用这些jar包中的类和属性。另外也可以打成可执行jar包,这样的包就可以通过java-jar命令来执行

war包也可以理解为web项目,通常用于网站

2、管理依赖

Maven通过pom.xml文件定义项目的依赖关系,自动下载和管理项目所需要的依赖库,减少手动管理依赖的错误和复杂性

依赖传递

早期不使用maven时向项目中添加依赖的jar包时,不仅需要知道此项目依赖哪些jar包,还要知道这些jar包都依赖哪些jar包,以及这些依赖之间的版本是如何关联的,此项目的直接依赖和间接依赖都要导入进来。

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源若依赖其他资源,当前项目则间接依赖其他资源

如今使用maven避免了管理所需依赖的关系,maven的依赖具有传递性,只需要在pom.xml文件中定义直接依赖,maven就会自动把此依赖所依赖的其他jar包也一起导入。

依赖排除

随着项目越来越复杂,库之间的依赖关系也会越来越复杂,此时可以进行一些依赖排除。比如上图中需要jarA,但是并不需要jarB。

  • 依赖排除:主动断开依赖的资源(被排除的资源无需指定版本)
XML 复制代码
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>
     <version>6.0.6</version>

     <!--排除依赖-->
     <exclusions>
         <exclusion>
             <artifactId>spring-jcl</artifactId>
             <groupId>org.springframework</groupId>
         </exclusion>
     </exclusions>
</dependency>

Maven Helper插件 --- 观察包和包之间的依赖关系找到冲突,解决依赖冲突

依赖调节、可选依赖

当项目中的依赖存在依赖冲突时,Maven会采用最短路径的原则选择依赖(A->D->X),当然我们也可以选择指定某个依赖的版本(2.0)

  • A->B->C->X(1.0) (×)
  • A->D->X(2.0) ( )
步骤
  1. 解析pom.xml文件获取所有配置的依赖信息
  2. 根据pom.xml、setting.xml配置,maven查找本地仓库和远程仓库(中央、私服、公共)
  3. 下载依赖添加到项目中
  4. 检查所有依赖的版本冲突,解决版本冲突
原理

mvnrepository.com相当于一个中央仓库的目录服务,是一个查询网站,提供了中央仓库中可用构件的详细信息,包括版本、依赖关系等。

maven根据pom.xml文件中的groupId、artifactId、version的配置来唯一识别一个jar包

maven查找仓库的顺序:

  • 本地仓库:自己计算机上的一个目录(用于存储jar包)
  • 私服:一般由公司团队搭建的私有仓库
  • 中央仓库:maven软件中内置一个中央仓库地址,服务于整个互联网,全球唯
Maven设置国内源

主要是为了提高下载速度,可以给maven设置国内源,另外还可以避免访问限制、减少对中央仓库的负担

可以在setting.xml文件中进行配置:(上图中User settings files中有此文件地址)

XML 复制代码
<mirror>
     <id>aliyunmaven</id>
     <mirrorOf>central</mirrorOf>
     <name>阿⾥云公共仓库</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

上述配置的内容只对当前项目生效,为了让后续的项目也生效,需要重新设置一下新项目的Settings。让新项目和当前项目共用一个settings文件即可。

修改Maven目录的地址

这个目录里面放了两个东西,一个是本地仓库,一个是settings.xml

上面说了Maven查找依赖的顺序是:本地仓库--->远程仓库

若本地仓库未找到,Maven会从配置的远程仓库下载依赖到本地仓库,然后再使用这些依赖。并且这样在下次构建项目时就可以直接从本地仓库中获取这些依赖项,无需再从中央仓库下载,从而提高了构建速度。

但这样随着项目和依赖的增加,会使本地仓库占用大量空间,导致系统空间不足,况且maven目录的默认地址还是在C盘

所以我们最好还是修改下maven目录的地址,确保有足够的空间存储本地仓库中的依赖

(1)创建你期望放置的目录

(2)进入当前(默认)maven的配置目录 C:\Users\86159\.m2,复制此目录下的文件到D:\Maven

(3)修改IDEAL配置

①配置当前项目中路径

②新项目设置

相关推荐
我命由我123454 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
mCell4 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯5 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0015 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby6 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
醉城夜风~7 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
数智化转型推荐官8 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互8 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
IT_陈寒9 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
程序员张310 小时前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端