Maven

概述

Maven是一个强大的项目管理和构建自动化工具,主要用于Java项目。它由Apache软件基金会开发,旨在简化构建过程、依赖管理和项目信息管理。以下是Maven的主要作用:

1、依赖管理:Maven可以帮助你管理项目依赖的第三方库。通过在POM(project object model)文件中声明依赖,Maven会自动下载并引入这些依赖,避免了版本冲突问题、手动管理的麻烦。

如果手动下载jar包并导入,不仅面临下载麻烦,更新版本、替换jar包时还需要更换大量资源,费时费力。

使用Maven后,我们不需要导入任何jar包,只需要在Maven工程的pom.xml配置文件中添加依赖描述信息即可:

XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>/*依赖名称*/</artifactId>
            <scope>/*依赖版本*/</scope>
        </dependency>
    </dependencies>

添加后系统会在仓库中查找相应的资源并添加,仓库有三种:

  • 本地仓库:本地用于存储jar包的目录
  • 中央仓库:由 Maven 团队维护的全球唯一的仓库,地址:Central Repository:
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

系统会先在本地仓库查找,有则添加,无则连接中央仓库下载,但因中央仓库为海外地址,下载速度较慢,我们选择引入远程仓库作为媒介,查找顺序:本地仓库->远程仓库->中央仓库

2、统一项目结构:因为开发软件的不同,所以早期的java项目会出现同一文件不同版本无法识别的情况,而Maven提供了一套标准的项目结构,使项目无论在哪个编译器中都可正常运行

  • Maven构建的项目
    • src
      • main:实际项目资源
        • java:java源代码目录
        • resources:配置文件目录
      • test:测试项目资源
        • java
        • resources
      • pom.xml:项目配置文件

3、项目构建 :Maven提供了一套跨平台标准的项目构建流程,原始java文件需要 编译---测试---打包---发布 一系列流程,较为繁琐。而通过Maven我们可以输入对应的指令,系统会自动进行相应的操作

安装与配置

1、搜索maven安装包并下载解压

2、配置本地仓库:修改conf/settings.xml中的<localRepository>为一个指定目录

XML 复制代码
<localRepository>/*指定路径*/</localRepository>

3、配置阿里云私服:修改conf/settings.xml中的<mirrors>标签,为其添加如下子标签:

XML 复制代码
<mirror>
	<id>alimaven</id>
	<mirrorOf>central</mirrorOf>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

4、配置环境变量

新建系统变量:变量名:MAVEN_HOME,变量值:安装目录,再将path环境变量中,添加 %MAVEN_HOME%\bin

IDEA集成Maven

创建Maven项目

选择文件→新建→项目,在Spring initializer 选项中勾选java和maven,并

在 src→main→java目录下创建java类,例 com.example.myproject,其中 com.example 为包名,myproject 为类名

此时test目录下的resources文件因为不常用,所以并未创建,我们可以右键java目录→directory,会出现快捷创建resources文件的选项

此时我们补全代码并运行,目录下会自动生成 target 文件用于存放java代码编译后产生的字节码文件

坐标

在Maven中,坐标(Coordinate)是资源的唯一标识,通过该坐标可以唯一定位资源位置。坐标由以下三个主要元素组成:

  • groupId:定义项目所在的组或组织。通常采用反向域名表示法,例如 com.example。
  • artifactId:定义Maven项目名称。这个ID应该是小写的,
  • version:定义项目版本号。版本号通常包含三个数字,以点分隔,例如 1.0.0
XML 复制代码
    <groupId>org.example</groupId>
    <artifactId>maven</artifactId>
    <version>0.0.1-SNAPSHOT</version>

IDEA导入Maven项目

导入Maven项目有两种方式

方式一:

点击idea右侧Maven面板,点击+号,选中对应的pom.xml文件,双击即可。

如果没有Maven面板,点击View→Appearance→Tool Windows Bars

方式二:

点击File→Project Structure→+→import Module→选择pom.xml→OK

依赖管理

依赖配置

依赖指当前项目运行所需要的jar包,一个项目中可以引入多个依赖

在Maven项目中,依赖通过在项目的pom.xml文件中的<dependencies>部分声明,可声明多个依赖,而每个依赖项都使用<dependency>标签包裹:

XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

修改完依赖后点击按钮,等待下载完成后依赖即可生效。

依赖传递

Maven具有依赖传递特性,这意味着如果你声明了一个依赖,它所依赖的库也会被自动添加到项目中。

例如,如果你依赖了projectA,而projectA又依赖于projectB和其他jar包,那么projectB及其依赖,还有其他projectA依赖的jar包也会被添加到你的项目中。

其中 projectB 和第一个jar包为直接依赖,其余为间接依赖

  • 直接依赖:项目pom.xml中明确声明的依赖,是项目功能实现所必需的。
  • 间接依赖:项目通过直接依赖引入的其他库,不是项目直接声明的,但同样需要下载。

依赖排除

如果需要排除某个传递性依赖,可以使用<exclusions>标签。其与添加依赖相似,但无需使用版本号,可通过<scope>......</scope>设置其作用范围:

|-------------|-----------|------------|---------------|
| scope值 | 主程序(main) | 测试程序(test) | 打包运行(package) |
| compile(默认) | | | |
| test | | | |
| provided | | | |
| runtime | | | |

XML 复制代码
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.10</version>
    <!--排除依赖-->
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <scope>test</scope>
    </exclusion>
  </exclusions>
</dependency>

生命周期

Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。它定义了三个内置的生命周期,每个生命周期包含了一系列的阶段(Phase),这些阶段是构建项目的有序步骤,我们选取其中的五个较为重要的阶段来学习(在同一套生命周期中,阶段是有先后顺序的,后面的阶段是需要依赖于前面的阶段)。

  1. 清理(Clean)生命周期:清理工作
  • clean:清理上一次构建生成的文件。
  1. 默认(Default)生命周期:核心工作,如:编译、测试、打包、安装、部署等
  • compile:编译项目的源代码。
  • test:使用适当的单元测试框架(如JUnit)运行单元测试
  • package:将编译后的代码打包成可分发格式,如JAR、WAR等。
  • install:将包安装到本地仓库,供本地其他项目使用。
  1. 站点(Site)生命周期:生成报告,发布站点等

执行

执行指定的生命周期有两种方法

一、点击idea右侧的Maven工具栏,双击执行所需要的生命周期,也可以选择跳过test阶段

二、在命令行中,通过指令执行:打开项目所在目录,输入cmd,输入mvn clean或其他指令执行程序。

实际上Maven的生命周期及其各个阶段都是抽象的概念,其并不执行具体的操作,其操作由与其绑定的插件来完成,因为Maven本身就是一个插件执行框架

相关推荐
Swift社区20 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT21 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy21 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss1 天前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续1 天前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
benben0441 天前
ReAct模式解读
java·ai
轮到我狗叫了1 天前
牛客.小红的子串牛客.kotori和抽卡牛客.循环汉诺塔牛客.ruby和薯条
java·开发语言·算法
令狐少侠20111 天前
maven settings.xml文件的各个模块、含义以及它们之间的联系
xml·maven
Volunteer Technology1 天前
三高项目-缓存设计
java·spring·缓存·高并发·高可用·高数据量