【Maven】项目管理工具

news2025/4/25 11:49:54

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.coloradmin.cn/o/2342394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity InputSystem触摸屏问题

最近把Unity打包后的windows软件放到windows触摸屏一体机上测试&#xff0c;发现部分屏幕触摸点击不了按钮&#xff0c;测试了其他应用程序都正常。 这个一体机是这样的&#xff0c;一个电脑机箱&#xff0c;外接一个可以触摸的显示屏&#xff0c;然后UGUI的按钮就间歇性点不了…

Linux Awk 深度解析:10个生产级自动化与云原生场景

看图猜诗&#xff0c;你有任何想法都可以在评论区留言哦~ 摘要 Awk 作为 Linux 文本处理三剑客中的“数据工程师”&#xff0c;凭借字段分割、模式匹配和数学运算三位一体的能力&#xff0c;成为处理结构化文本&#xff08;日志、CSV、配置文件&#xff09;的终极工具。本文聚…

免费版还是专业版?Dynadot 域名邮箱服务选择指南

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

旋转磁体产生的场-对导航姿态的影响

pitch、yaw、roll是描述物体在空间中旋转的术语&#xff0c;通常用于计算机图形学或航空航天领域中。这些术语描述了物体绕不同轴旋转的方式&#xff1a; Pitch&#xff08;俯仰&#xff09;&#xff1a;绕横轴旋转&#xff0c;使物体向前或向后倾斜。俯仰角度通常用来描述物体…

Day11(回溯法)——LeetCode79.单词搜索

1 前言 今天主要刷了一道热题榜中回溯法的题&#xff0c;现在的计划是先刷热题榜专题吧&#xff0c;感觉还是这样见效比较快。因此本文主要介绍LeetCode79。 2 LeetCode79.单词搜索(LeetCode79) OK题目描述及相关示例如下&#xff1a; 2.1 题目分析解决及优化 感觉回溯的方…

PostgreSQL 分区表——范围分区SQL实践

PostgreSQL 分区表——范围分区SQL实践 1、环境准备1-1、新增原始表1-2、执行脚本新增2400w行1-3、创建pg分区表-分区键为创建时间1-4、创建24年所有分区1-5、设置默认分区&#xff08;兜底用&#xff09;1-6、迁移数据1-7、创建分区表索引 2、SQL增删改查测试2-1、查询速度对比…

SpringCloud 微服务复习笔记

文章目录 微服务概述单体架构微服务架构 微服务拆分微服务拆分原则拆分实战第一步&#xff1a;创建一个新工程第二步&#xff1a;创建对应模块第三步&#xff1a;引入依赖第四步&#xff1a;被配置文件拷贝过来第五步&#xff1a;把对应的东西全部拷过来第六步&#xff1a;创建…

【Python爬虫基础篇】--4.Selenium入门详细教程

先解释&#xff1a;Selenium&#xff1a;n.硒&#xff1b;硒元素 目录 1.Selenium--简介 2.Selenium--原理 3.Selenium--环境搭建 4.Selenium--简单案例 5.Selenium--定位方式 6.Selenium--常用方法 6.1.控制操作 6.2.鼠标操作 6.3.键盘操作 6.4.获取断言信息 6.5.…

Langchain检索YouTube字幕

创建一个简单搜索引擎&#xff0c;将用户原始问题传递该搜索系统 本文重点&#xff1a;获取保存文档——保存向量数据库——加载向量数据库 专注于youtube的字幕&#xff0c;利用youtube的公开接口&#xff0c;获取元数据 pip install youtube-transscript-api pytube 初始化 …

【Linux网络】应用层自定义协议与序列化及Socket模拟封装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

客户案例:西范优选通过日事清实现流程与项目管理的优化

近几年来&#xff0c;新零售行业返璞归真&#xff0c;从线上销售重返线下发展&#xff0c;满足消费者更加多元化的需求&#xff0c;国内家居集合店如井喷式崛起。为在激烈的市场竞争中立于不败之地&#xff0c;西范优选专注于加强管理能力、优化协作效率的“内功修炼”&#xf…

LabVIEW实现Voronoi图绘制功能

该 LabVIEW 虚拟仪器&#xff08;VI&#xff09;借助 MathScript 节点&#xff0c;实现基于手机信号塔位置计算 Voronoi 图的功能。通过操作演示&#xff0c;能直观展示 Voronoi 图在空间划分上的应用。 各部分功能详细说明 随机地形创建部分 功能&#xff1a;根据 “Maximum a…

爬虫学习——获取动态网页信息

对于静态网页可以直接研究html网页代码实现内容获取&#xff0c;对于动态网页绝大多数都是页面内容是通过JavaScript脚本动态生成(也就是json数据格式)&#xff0c;而不是静态的&#xff0c;故需要使用一些新方法对其进行内容获取。凡是通过静态方法获取不到的内容&#xff0c;…

创新项目实训开发日志4

一、开发简介 核心工作内容&#xff1a;logo实现、注册实现、登录实现、上传gitee 工作时间&#xff1a;第十周 二、logo实现 1.设计logo 2.添加logo const logoUrl new URL(/assets/images/logo.png, import.meta.url).href <div class"aside-first">…

常见接口测试常见面试题(JMeter)

JMeter 是 Apache 提供的开源性能测试工具&#xff0c;主要用于对 Web 应用、REST API、数据库、FTP 等进行性能、负载和功能测试。​它支持多种协议&#xff0c;如 HTTP、HTTPS、JDBC、SOAP、FTP 等。 在一个线程组中&#xff0c;JMeter 的执行顺序通常为&#xff1a;配置元件…

计算机组成与体系结构:缓存(Cache)

目录 为什么需要 Cache&#xff1f; &#x1f9f1; Cache 的分层设计 &#x1f539; Level 1 Cache&#xff08;L1 Cache&#xff09;一级缓存 &#x1f539; Level 2 Cache&#xff08;L2 Cache&#xff09;二级缓存 &#x1f539; Level 3 Cache&#xff08;L3 Cache&am…

Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?

Flutter 在全新 Platform 和 UI 线程合并后&#xff0c;出现了什么大坑和变化&#xff1f; 在两个月前&#xff0c;我们就聊过 3.29 上《Platform 和 UI 线程合并》的具体原因和实现方式&#xff0c;而事实上 Platform 和 UI 线程合并&#xff0c;确实为后续原生语言和 Dart 的…

stm32之GPIO函数详解和上机实验

目录 1.LED和蜂鸣器1.1 LED1.2 蜂鸣器 2.实验2.1 库函数&#xff1a;RCC和GPIO2.1.1 RCC函数1. RCC_AHBPeriphClockCmd2. RCC_APB2PeriphClockCmd3. RCC_APB1PeriphClockCmd 2.1.2 GPIO函数1. GPIO_DeInit2. GPIO_AFIODeInit3. GPIO_Init4. GPIO_StructInit5. GPIO_ReadInputDa…

用 PyQt5 和 asyncio 打造接口并发测试 GUI 工具

接口并发测试是测试工程师日常工作中的重要一环&#xff0c;而一个直观的 GUI 工具能有效提升工作效率和体验。本篇文章将带你用 PyQt5 和 asyncio 从零实现一个美观且功能实用的接口并发测试工具。 我们将实现以下功能&#xff1a; 请求方法选择器 添加了一个下拉框 QComboBo…

Qt实战之将自定义插件(minGW)显示到Qt Creator列表的方法

Qt以其强大的跨平台特性和丰富的功能&#xff0c;成为众多开发者构建图形用户界面&#xff08;GUI&#xff09;应用程序的首选框架。而在Qt开发的过程中&#xff0c;自定义插件能够极大地拓展应用程序的功能边界&#xff0c;让开发者实现各种独特的、个性化的交互效果。想象一下…