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

【Maven】项目管理工具

Maven:一个项目管理工具

前言

传统项目管理存在的问题:

  • 依赖管理混乱
    • 需要自己去网上搜 jar 包,找对版本很痛苦(还容易找错)
    • 某个库依赖另一个库(传递依赖),你得自己挨个找齐
    • 不小心引入多个版本的 jar,运行时会出错(版本冲突)
  • 重复劳动严重
    • 每个新项目都要手动去复制一堆 jar 包
    • jar 包变更后,每台电脑都得手动同步
    • 拷来拷去,很容易拷错或漏拷
  • 项目臃肿
    • 所有依赖都塞进项目 lib/ 目录,体积越来越大
    • 压缩打包项目时,把几十个 jar 全打进去,严重拖慢部署速度
  • 缺乏标准的构建流程
  • 编译、测试、打包步骤全靠人工或写 shell 脚本
  • 没有统一规范,团队成员各干各的,出问题互相甩锅
  • 测试和生产环境构建出来的包可能不一致
  • 依赖冲突难排查
    • 不小心引入了多个版本的 jar 包,运行时才发现问题
    • 没有依赖树工具,不知道是哪个库带来的冲突
  • 团队协作成本高
    • 新人加入团队,要手动搭建环境、找依赖
    • 打包部署靠经验和习惯,出错风险高
    • 无法快速复现线上环境(缺乏统一配置)

Maven的出现 解决了这一切的问题
Maven 提供了:

功能核心价值
pom.xml 统一配置告别手动管理依赖,实现"配置即文档"
本地/中央仓库机制自动下载依赖,解决传统方式手动拷贝jar包的问题
生命周期 + 插件系统自动化构建、测试、打包,统一团队构建流程
依赖树分析通过mvn dependency:tree快速定位冲突,解决jar包版本兼容问题
多模块支持父子POM结构轻松拆分大型项目,实现模块化开发
profile 配置一套POM支持多环境(dev/test/prod),避免维护多个配置文件

Maven 是什么

简介

  • Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
  • POM(Project Object Model):项目对象模型

作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  • 统一开发结构:提供标准的、统一的项目结构

POM 是什么

简介

pom 即 pom.xml,是 Maven 项目的核心配置文件,是项目的“说明书”。

作用

  • 描述项目基本信息(名称、版本等)
  • 声明依赖(告诉 Maven 需要哪些库)
  • 定义构建规则(插件、打包方式等)
  • 配置构建生命周期(编译→测试→打包)
  • 标识是父项目或子模块

最小可运行配置

<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"><!-- 1. 固定的 POM 模型版本,目前只有这个版本,不可修改 --><modelVersion>4.0.0</modelVersion><!-- 2. 唯一标识这个项目的“坐标” --><groupId>com.example</groupId><artifactId>demo</artifactId><version>1.0.0</version></project>

常用标签解析


仓库

  • 用于存储资源,包含各种iar包
  • 仓库分类:
    • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
    • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
      • 中央仓库:Maven团队维护,存储所有资源的仓库
      • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:
    • 保存具有版权的资源,包含购买或自主研发的iar
      • 中央仓库中的iar都是开源的,不能存储具有版权的资源
    • 一定范围内共享资源,仅对内部开放,不对外共享

坐标

简介及作用

  • groupId + artifactId + 版本号统称为坐标,用于在 Maven 仓库中唯一定位项目,可以唯一定位到某个 jar 包
  • 类似地图坐标的概念,通过组合值精确定位资源

artifactId

  • 项目/模块标识名
  • 示例:
    tomcat | spring-core | myproject-api

groupId

  • 组织标识名(采用反向域名规则)
  • 分段说明:
    • 第一段:域分类
      com(商业组织)| org(非营利组织)| cn(国家代码)
    • 第二段起:组织名称
      如:fullstack | apache | google

组合示例

项目示例groupIdartifactIdversion
Apache Tomcatorg.apachetomcat3.0.1
商业公司项目com.fullstackpayment-system3.0.1

命名规范建议

  1. groupId 采用小写字母+点分结构
  2. artifactId 使用小写字母+连字符(kebab-case)
  3. 确保组合在仓库中全局唯一

项目结构规范

your-project/
├── pom.xml                        # Maven 主配置文件
├── README.md                      # 项目说明文档
├── .gitignore                     # Git 忽略文件配置
├── src/
│   ├── main/
│   │   ├── java/                  # 主代码目录
│   │   │   └── com/
│   │   │       └── yourcompany/
│   │   │           └── yourproject/
│   │   │               ├── Application.java         # 启动类
│   │   │               ├── controller/              # 控制器
│   │   │               ├── service/                 # 服务层
│   │   │               ├── repository/              # DAO/Repository 层
│   │   │               ├── model/                   # 实体类或DTO/VO类
│   │   │               ├── config/                  # 配置类,如拦截器、跨域、安全、Swagger等
│   │   │               └── utils/                   # 工具类
│   │   └── resources/             # 配置与资源文件
│   │       ├── application.yml    # Spring Boot 配置
│   │       ├── application-dev.yml
│   │       ├── application-prod.yml
│   │       ├── static/            # 静态资源(前端静态文件:html/js/css/images)
│   │       ├── templates/         # 模板文件(Thymeleaf、Freemarker等)
│   │       └── mapper/            # MyBatis XML 文件
│   ├── test/
│   │   ├── java/                  # 测试代码
│   │   │   └── com/
│   │   │       └── yourcompany/
│   │   │           └── yourproject/
│   │   │               └── ApplicationTests.java
│   │   └── resources/            # 测试资源
├── target/                        # 编译输出目录(Maven自动生成)

http://www.mrgr.cn/news/99292.html

相关文章:

  • 诱骗协议芯片支持PD2.0/3.0/3.1/PPS协议,支持使用一个Type-C与电脑传输数据和快充取电功能
  • 无需花钱购买域名服务器!使用 VuePress + Github 30分钟搭建属于自己的博客网站(保姆级教程)
  • 在Ubuntu 18.04下编译OpenJDK 11
  • Emacs入门篇2:安装evil插件以便vi老用户可以使用VI快捷键来快速使用Emacs
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
  • Java虚拟机之GC收集器对比解读
  • Linux学习之守护进程1
  • 【springsecurity oauth2授权中心】简单案例跑通流程 P1
  • 音视频小白系统入门课-2
  • NestJS-Knife4j
  • 9.策略模式:思考与解读
  • HTTP/1.1 队头堵塞
  • [架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析
  • PostgreSQL 用户资源管理
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(8): - (1)复习一些语法(2)「~ています」
  • Linux系统-cat命令/more命令/less命令
  • 软件工程师中级考试-上午知识点总结(上)
  • LTspice测量SiC MOSFET的C-V特性
  • Linux Wlan-四次握手(eapol)框架流程
  • 本地搭建一个简易版本的 Web3 服务