当前位置: 首页 > news >正文

[Maven 基础课程]Maven 是什么

Maven 的官方网站:https://maven.apache.org/

来自 Maven 官网的对于 Maven 是什么的描述:

Apache Maven is a build tool for Java projects. Using a project object model (POM), Maven manages a project’s compilation, testing, and documentation.

翻译过来就是:Apache Maven 是一款用于 Java 项目的构建工具。通过使用项目对象模型(POM),Maven 能够管理项目的编译、测试以及文档编制工作。

目前 Maven 是 Java 中最主流的构建工具,Gradle 现在也非常火,SpringBoot 现在使用 Gradle 编译项目,但是 Gradle 比较复杂,没有 Maven 普及率广,可以说 Maven 对于 Java 程序员来说是必学的。

一句话总结:Maven 就像是 Java 项目的“管家”,它帮你把项目从源码一步步变成可运行的软件。

为什么需要 Maven

想象一下,你正在开发一个 Java 项目。这个项目需要用到很多其他库(比如处理 JSON 的 Gson 库、网络请求的 HttpClient 库),并且你还需要:

  • 编译你的源代码(.java 文件)。
  • 将编译好的类文件(.class 文件)打包成 JAR 或 WAR 文件。
  • 运行单元测试来确保代码没有问题。
  • 生成项目文档和报告。

在没有 Maven 之前,开发者需要手动去下载各种 JAR 包,然后放到项目的 lib 文件夹下。如果依赖的库又依赖其他库(传递依赖),就会变得非常麻烦。

Maven 的出现解决了这些痛点:

  • 自动下载依赖,不再手动复制 JAR 包
  • 清晰的项目结构,统一的目录规范
  • 标准化的构建流程,团队协作更方便
  • 提供丰富的插件支持,比如单元测试、文档生成、打包部署等

Maven 的核心功能

依赖管理(Dependency Management)

这是 Maven 最强大的功能之一。你只需要在项目的 pom.xml 文件中声明你需要的依赖(比如 Gson),Maven 就会:

  • 自动从中心仓库下载这些依赖,并缓存到你的本地仓库。
  • 自动处理依赖的依赖(也叫传递性依赖)。例如,如果你依赖 A,而 A 又依赖 BC,Maven 会自动为你下载 BC

有了 Maven,你再也不需要手动管理一堆 JAR 包了,这大大简化了项目配置和管理。

标准化项目结构

Maven 规定了一个标准的项目目录结构。例如:

your-project/
├── src/
│   ├── main/
│   │   ├── java/         # 存放你的源代码
│   │   └── resources/    # 存放配置文件、图片等资源文件
│   └── test/
│       ├── java/         # 存放你的测试代码
│       └── resources/    # 存放测试用到的资源文件
└── pom.xml               # 项目对象模型文件

这种结构让不同团队成员在接手新项目时能快速上手,因为它遵循了统一的约定。

标准化的构建生命周期

Maven 定义了一套标准的构建生命周期,它包括一系列阶段(phase),比如:

  • validate: 验证项目是否正确。
  • compile: 编译源代码。
  • test: 运行单元测试。
  • package: 将编译好的代码打包(通常是 JAR 或 WAR)。
  • install: 将包安装到本地仓库,供其他本地项目使用。
  • deploy: 将包部署到远程仓库。

你可以通过简单的命令,如 mvn clean install,来执行整个生命周期,而不需要关心每个阶段的底层细节。

http://www.dtcms.com/a/351034.html

相关文章:

  • 【Linux操作系统】简学深悟启示录:环境变量进程地址
  • Java基础第5天总结(final关键字,枚举,抽象类)
  • Redis-数据类型与常用命令
  • Java数据结构——9.排序
  • 【OpenAI】ChatGPT-4o 全能AI-omni的详细介绍+API KET的使用教程!
  • Stream API 新玩法:从 teeing()到 mapMulti()
  • 多种“找不到vcruntime140.dll,无法继续执行代码”提示的解决方法:从原理到实操,轻松修复系统故障
  • 【Delphi】中通过索引动态定位并创建对应窗体类实例
  • CMake构建学习笔记20-iconv库的构建
  • MATLAB在生态环境数据处理与分析中的应用,生态系统模型构建与数值模拟等
  • 简述滚珠丝杆升降机的结构和原理
  • CSS 结构伪类选择器
  • 【BUG排查】调试瑞萨RH850F1KMS1时候随机出现进入到unused_isr
  • 一款基于 .NET 开源、功能强大的 Windows 搜索工具
  • GD32VW553-IOT开发板测评 搭建环境到电灯(QA分享)
  • 使用提供的 YAML 文件在 Conda 中创建环境
  • Conda的配置
  • 实时平台Flink热更新技术——实现不停机升级!
  • Caddy + CoreDNS 深度解析:从功能架构到性能优化实践(上)
  • webrtc音频QOS方法一.1(NetEQ之音频网络延时DelayManager计算补充)
  • 设计模式学习笔记-----抽象策略模式
  • 【Ansible】Ansible部署K8s集群--准备环境--配置网络
  • 主流的 AI Agent 开发框架
  • 论文阅读(四)| 软件运行时配置研究综述
  • 游戏玩家批量多开挂机如何选择:云手机还是模拟器
  • LabVIEW 场效应晶体管仿真实验平台
  • 工业自动化系统架构-(多动子磁悬浮生产流水线 规划调度执行与协调)
  • 从下载到运行:MySQL 详细安装配置完整教程
  • 【Vue3】Cesium实现卫星及无人机轨迹跟踪
  • 大模型入门实战 | 基于 YOLO 数据集微调 Qwen2.5-VL-3B-Instruct 的目标检测任务