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本身就是一个插件执行框架

相关推荐
爬菜9 分钟前
java简单题目练习
java
bufanjun00110 分钟前
JUC并发工具---ThreadLocal
java·jvm·面试·并发·并发基础
南宫生20 分钟前
力扣-图论-70【算法学习day.70】
java·学习·算法·leetcode·图论
zfj32120 分钟前
java日志框架:slf4j、jul(java.util.logging)、 log4j、 logback
java·log4j·logback·java日志框架·slf4j·jul
程序猿阿伟27 分钟前
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
java·spark-ml·apache
向阳121836 分钟前
sentinel来源访问控制(黑白名单)
java·sentinel
Takumilove37 分钟前
MQTT入门:在Spring Boot中建立连接及测试
java·spring boot·后端
潜洋1 小时前
Spring Boot 教程之三十六:实现身份验证
java·数据库·spring boot
TroubleMaker1 小时前
OkHttp源码学习之retryOnConnectionFailure属性
android·java·okhttp
cloud___fly1 小时前
Spring AOP入门
java·后端·spring