[Maven]Maven基础

一.Maven概念与特点

1.1什么是Maven

我的总结

Maven是一个基于Java开发的软件,核心功能是快速创建项目和管理依赖(自动下载jar)。可以简化与快速地完成项目构建。

1.2Maven的特点

1.2.1简化构建项目过程

以前构造项目都是从网站上下载.jar包,然后挑一些能用到的,放入我们的项目的文件夹下。并且如果各个框架下有不同的jar包的时候,会产生jar包冲突,导致项目跑不起来了,非常的麻烦。

而Maven帮我们解决了jar包的冲突,帮我们做统一的版本控制,我们只用引入一个依赖,就可以把一大堆我们想要的包引入进来了,可以简化构建项目的过程。

1.2.2 提供统一的构建系统

maven有自己的生命周期,可以快速地构建我们的项目(编译,测试,打包,报告,发布)。

1.2.3提供高质量的项目信息

可以帮我们运行测试程序,生产测试报告等

二.Maven工程结构说明

三.概念模型

🔹 最左边:pom.xml

这是 Maven 项目的核心配置文件,所有的项目信息、依赖、构建规则都写在这里。

  • 它定义了项目的坐标(groupIdartifactIdversion),就像项目的 "身份证"。
  • 项目对象模型(POM)就是以这个文件为基础,描述整个项目的结构和配置。

🔹 最上层核心模块(Maven 的三大核心机制)

  1. 项目对象模型(POM)

    • 这是 Maven 的基础,它把项目当成一个对象来管理,pom.xml 就是这个对象的描述文件。
    • 里面包含了项目名称、版本、依赖、插件等所有信息,Maven 靠它来识别和构建项目。
  2. 依赖管理模型(Dependency)

    • 负责管理项目需要的所有 jar 包(比如你用的 Druid、MySQL 驱动)。
    • 当你在 pom.xml 里声明一个依赖时,Maven 会自动从下面的 "仓库" 中下载对应的 jar 包,以及它依赖的其他 jar 包。
  3. 构建生命周期与阶段(Build lifecycle & phases)

    • Maven 定义了一套标准的构建流程,比如 cleancompiletestpackageinstall,每个步骤都是一个 "阶段"。
    • 执行 mvn package 时,Maven 会自动按顺序执行前面所有阶段(编译、测试等),最终生成打包产物。

🔹 中间层:插件(Plug-in)

Maven 的核心本身只定义了构建生命周期,而具体的编译、测试、打包等工作,都是由插件来完成的。

  • 每个插件对应一个或多个构建阶段,比如:
    • maven-compiler-plugin:负责编译 .java 文件到 .class
    • maven-surefire-plugin:负责执行 JUnit 测试用例。
    • maven-jar-plugin:负责打包成 jar 包。
  • 图里的 mojo 是插件里的最小执行单元,每个插件由多个 mojo 组成,每个 mojo 对应一个具体的任务。

🔹 最右边:仓库(Repository)

这是 Maven 存放 jar 包的地方,分为三类:

  1. Central(中央仓库):Maven 官方维护的全球公共仓库,包含了绝大多数开源 jar 包。
  2. b2b(第三方仓库):比如公司内部的私有仓库,或者阿里云等国内镜像仓库。
  3. Local(本地仓库):你电脑本地的仓库,下载过的 jar 包会存在这里,下次就不用重复下载了。

🔹 最下面:构建产物

Maven 构建流程会从 "源文件"(比如你的 .java 代码、.properties 配置)开始,经过插件处理,最终生成:

  • 中间文件:编译后的 .class 文件。
  • 资源文件:打包后的配置文件。
  • 二进制产物:可执行的 jar/war 包。
  • 打包产物:最终用于部署的包。

一句话总结整个流程

你在 pom.xml 里定义好项目(POM)和依赖,Maven 会从仓库下载依赖,然后按照构建生命周期,调用不同插件完成编译、测试、打包等任务,最终生成可部署的产物。

四.GAVP坐标

4.1jar

普通的java项目

4.2war

普通的Web项目

4.3pom

父工程标签

相关推荐
⑩-10 分钟前
RabbitMQ 架构和工作原理?RabbitMQ 延迟队列如何实现?
java·分布式·架构·rabbitmq
子非鱼@Itfuture12 分钟前
try-catch和try-with-resources区别是什么?try{}catch(){}和try(){}catch(){}有什么好处?
java·开发语言
Nyarlathotep011333 分钟前
线程创建和Thread类
java
阿波罗尼亚37 分钟前
JDK17 新特性
java
独自破碎E37 分钟前
【面试真题拆解】Spring事务机制
java·spring·面试
我是咸鱼不闲呀39 分钟前
力扣Hot100系列21(Java)——[多维动态规划]总结(不同路径,最小路径和,最长回文子串,最长公共子序列, 编辑距离)
java·leetcode·动态规划
lihao lihao42 分钟前
二分查找
java·数据结构·算法
Albert Edison42 分钟前
【C++11】可变参数模板
java·开发语言·c++
代码栈上的思考1 小时前
消息队列持久化:文件存储设计与实现全解析
java·前端·算法