Maven

文章目录

一.介绍

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建依赖管理支持的工具。作为一个强大的项目管理和构建工具,在软件开发过程中解决了多个关键问题,特别是在Java领域。以下是Maven主要解决的问题:

1. 依赖管理

  • 依赖自动解析与下载 :Maven通过定义在pom.xml文件中的依赖项,能够自动从配置的仓库(如Maven中央仓库)中解析并下载项目所需的第三方库和框架,大大简化了依赖管理的复杂性。
  • 依赖版本冲突:Maven提供了依赖冲突解决机制,通过依赖树(dependency tree)的查看和手动排除(exclusions)特定的依赖,可以有效地解决依赖版本冲突问题。
  • 依赖版本管理 :使用<dependencyManagement>标签可以在pom.xml中统一管理依赖的版本,确保项目中所有模块使用的依赖版本一致。

2. 项目构建自动化

  • 标准化构建过程:Maven将项目的构建过程(如清理、编译、测试、打包、部署等)标准化,并提供了丰富的插件来支持这些构建任务,使得项目的构建过程更加规范和高效。
  • 跨平台构建:Maven提供了一致的操作接口,使得项目可以在不同的操作系统和环境中进行构建,提高了项目的可移植性和可维护性。

3. 项目信息管理

  • 项目元数据管理 :Maven通过pom.xml文件管理项目的元数据,包括项目描述、开发者信息、版本控制系统地址等,这些信息有助于团队成员更好地理解和维护项目。
  • 生成项目文档和报告:Maven能够自动生成项目的文档(如API文档)和报告(如测试报告、静态代码分析报告等),为项目的质量评估和持续改进提供了有力支持。

4. 团队协作

  • 统一构建工具:Maven为团队成员提供了一种统一的构建工具,使得团队成员可以共享项目的构建配置和依赖信息,减少了因构建环境差异导致的问题。
  • 集成版本控制系统:Maven与版本控制系统(如Git)的集成,使得开发者可以更方便地跟踪和管理代码变更,促进了团队协作和版本控制。

5. 插件支持

  • 扩展性强:Maven拥有丰富的插件生态系统,开发者可以通过编写或使用第三方插件来扩展Maven的功能,满足特定的项目需求。

二.安装与配置

maven安装之前要先安装jdk,请确保你的系统已经安装了jdk环境。

1. 选择需要的maven版本下载

Maven -- Download Apache Maven

2. 下载完成后,解压缩到非中文,没有空格的目录

文件内容

3. 配置环境变量

新建系统变量MAVEN_HOME

编辑系统变量Path,添加变量值%MAVEN_HOME%\bin

验证

4. 配置settings文件

修改本地仓库地址

  1. 在maven安装目录下新建文件夹作为本地仓库
  2. 在setting中修改

配置私服

配置私服,因为中央仓库在国外导致下载jar包很慢或者失败,所以我们改为国内的服务器,下面三个选择一个就可以了。

xml 复制代码
<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

<mirror>
  <id>nexus-163</id>
  <mirrorOf>*</mirrorOf>
  <name>Nexus 163</name>
  <url>http://mirrors.163.com/maven/repository/maven-public/</url>
</mirror>

<mirror>
  <id>nexus-tencentyun</id>
  <mirrorOf>*</mirrorOf>
  <name>Nexus tencentyun</name>
  <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror> 

idea配置

修改为自己安装的位置

三.依赖管理

Maven Repository: Search/Browse/Explore (mvnrepository.com)

1. 依赖配置

  1. 依赖

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

  2. 配置

  3. 在pom.xml中编写标签

  4. 在标签中,使用引入坐标

  5. 定义坐标的groupId,artifactId,version

  6. 点击刷新按钮,引入最新加入的坐标

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>untitled</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

</project>

2. 依赖传递

Maven 会自动处理依赖的传递性。如果项目 A 依赖于项目 B,而项目 B 又依赖于项目 C,那么 Maven 会自动将项目 C 作为项目 A 的间接依赖项引入。

  1. 依赖具有传递性
  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目就间接依赖其他资源
  1. 排除依赖

排除依赖可以主动断开依赖的资源,被排除的资源无需指定版本

xml 复制代码
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

3. 依赖范围

Maven 允许为依赖项指定一个范围,这个范围决定了依赖项在哪些阶段(编译、测试、运行等)可用。常见的范围包括 compile、test、runtime、provided 和 system。

compile:默认范围,在编译、测试和运行阶段都有效。

test:仅在测试阶段有效,例如 JUnit。

runtime:在编译时不需要,但在运行时和测试时需要。

provided:在编译和测试时需要,但在运行时由 JDK 或容器提供。

system:与 provided 类似,但你需要手动指定依赖项的路径。

依赖的jar包默认在任何地方都可以使用,可以通过标签设置其作用范围

四.生命周期

Maven的生命周期是Maven构建工具的核心概念之一,它为项目构建提供了一个标准化和自动化的框架。Maven的生命周期是对构建过程进行的抽象,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。Maven的生命周期是抽象的,即生命周期本身不做任何实际的工作,而是定义了一系列的阶段(phase),并确定这些阶段的执行顺序。实际的任务由插件(plugin)来完成。

Maven内部有三个标准生命周期,分别是:

1. clean生命周期

目的是清理项目。

  • 包含三个阶段:

    • pre-clean:执行一些清理前需要完成的工作。
    • clean:清理上一次构建生成的文件,主要是删除target目录。
    • post-clean:执行一些清理后需要完成的工作。

2. default(或称为build)生命周期

是Maven生命周期中的核心部分,定义了真正构建项目时所需要执行的所有步骤。

  • 包含多个阶段,以下是一些关键的阶段:

    • validate:验证项目是否正确,所有需要的资源是否可用。
    • compile:编译项目的源代码。
    • test:使用合适的单元测试框架来测试已编译的源代码。
    • package:把已编译的代码打包成可发布的格式,如jar。
    • integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
    • verify:运行所有检查,验证包是否有效且达到质量标准。
    • install:把包安装到Maven本地仓库,可以被其他工程作为依赖来使用。
    • deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

3. site生命周期

目的是建立和发布项目站点。

  • 包含的阶段如下:

    • pre-site:生成项目站点之前需要完成的工作。
    • site:生成项目站点文档。
    • post-site:生成项目站点之后需要完成的工作。
    • site-deploy:将项目站点发布到服务器。

我们主要关注五个阶段

clean compile test package install

相关推荐
熊大如如3 小时前
Java 反射
java·开发语言
猿来入此小猿3 小时前
基于SSM实现的健身房系统功能实现十六
java·毕业设计·ssm·毕业源码·免费学习·猿来入此·健身平台
goTsHgo3 小时前
Spring Boot 自动装配原理详解
java·spring boot
卑微的Coder4 小时前
JMeter同步定时器 模拟多用户并发访问场景
java·jmeter·压力测试
pjx9874 小时前
微服务的“导航系统”:使用Spring Cloud Eureka实现服务注册与发现
java·spring cloud·微服务·eureka
多多*4 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle
爱喝酸奶的桃酥4 小时前
MYSQL数据库集群高可用和数据监控平台
java·数据库·mysql
唐僧洗头爱飘柔95275 小时前
【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
java·spring·mybatis·springmvc·动态代理·ioc容器·视图控制器
骑牛小道士5 小时前
Java基础 集合框架 Collection接口和抽象类AbstractCollection
java
alden_ygq6 小时前
当java进程内存使用超过jvm设置大小会发生什么?
java·开发语言·jvm