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

相关推荐
Q_192849990610 分钟前
基于Spring Boot的个人健康管理系统
java·spring boot·后端
m0_748245171 小时前
Web第一次作业
java
小码的头发丝、1 小时前
Java进阶学习笔记|面向对象
java·笔记·学习
m0_548514771 小时前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript
坊钰2 小时前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
chenziang12 小时前
leetcode hot100 LRU缓存
java·开发语言
会说法语的猪2 小时前
springboot实现图片上传、下载功能
java·spring boot·后端
码农老起2 小时前
IntelliJ IDEA 基本使用教程及Spring Boot项目搭建实战
java·ide·intellij-idea
m0_748239832 小时前
基于web的音乐网站(Java+SpringBoot+Mysql)
java·前端·spring boot