Maven基础

简介: Maven基础

Maven

Maven把项目开发和管理过程抽象为一个项目对象模型(POM)

POM(Project Object Model):项目对象模型

image-20230514155038037.png

Maven的作用:

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

Maven核心概念

仓库

用于存储资源,包含各种jar包

image-20230514160340819.png

坐标

https://mvnrepository.com/

用于描述仓库中资源的位置

Maven坐标主要组成:

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
  • version:版本号
  • packaging:打包方式

项目构建

mvn compile         # 编译

mvn clean           # 清理(删除编译完成的东西)

mvn test            # 测试

mvn package         # 打包(打成jar包)

mvn install         # 安装到本地仓库

依赖管理

依赖配置

依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

image-20230514192043941.png

依赖传递

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

image-20230514192539326.png

依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖

可选依赖指对外隐藏当前所依赖的资源——不透明

image-20230514193135365.png

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——排除依赖就是不需要某依赖

image-20230514193337680.png

依赖范围

scope

依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定其作用范围

作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)

image-20230516194900256.png

servlet-api不参与打包,因为服务器上tomcat本来就有,会冲突

依赖范围传递性

带有依赖范围的资源在进行传递时,作用范围将受到影响

image-20230516195700950.png

生命周期与插件

项目构建生命周期

image-20230516200206349.png

Maven构建生命周期描述的是一次构建过程经历了多少个事件

Maven对项目构建的生命周期划分为3套:

  • clean清理工作
  • default
    核心工作,例如编译、测试、打包、部署等
  • site
    产生报告,发布站点等

clean生命周期

  • pre-clean     执行一些需要在clean之前完成的工作
  • clean             移除所有上一次构建生成的文件
  • post-clean      
    执行一些需要在clean之后立即完成的工作

default生命周期

image-20230516200720498.png

site生命周期

image-20230516200757820.png

插件

image-20230516200952024.png

image-20230516201242880.png

多模块构建维护

聚合

image-20230516201858004.png

image-20230516202015891.png

image-20230516202122715.png

聚合:

作用:管理多模块

image-20230516202424193.png

继承

模块依赖关系维护

image-20230516202933965.png

image-20230516203054006.png

image-20230516203225836.png

子工程在继承父工程之后,dependency的version可以不写

继承:

作用:通过继承可以实现在子工程中沿用父工程中的配置

image-20230516204048666.png

image-20230516204132467.png

继承依赖使用

在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本

image-20230516210037268.png

继承的资源

image-20230516210258200.png

继承与聚合

image-20230516210409840.png

属性

image-20230517164602360.png

image-20230517164615268.png

属性类别

image-20230517164850940.png

image-20230517164910783.png

image-20230517164931937.png

image-20230517164948470.png

image-20230517165017339.png

image-20230517165233357.png

版本管理

image-20230517165420907.png

image-20230517165449673.png

image-20230517165735822.png

资源配置多文件维护

image-20230517170302205.png

image-20230517170354201.png

image-20230517170540157.png

配置文件引用pom属性

image-20230517170652587.png

多环境开发配置

image-20230517170905345.png

image-20230517171040023.png

image-20230517171207065.png

image-20230517171325731.png

加载指定环境

image-20230517171434344.png


目录
相关文章
|
2月前
|
人工智能 监控 架构师
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
本文以淘宝闪购服务包系统为案例,探索如何借助 AI 技术辅助领域驱动设计(DDD)落地。
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
|
2月前
|
存储 人工智能 安全
AICoding实践:从Prd到代码生成
本文探讨了在AI技术推动软件工程范式变革的新阶段,如何通过构建增强型AI编程系统(codefuse)实现从需求到代码的端到端自动生成。
1030 21
AICoding实践:从Prd到代码生成
|
3月前
|
人工智能 自然语言处理 安全
氛围编程走远,规格驱动开发降临
本文分析了目前行业内github,openai,amazon等对规格驱动开发的尝试和工具,提出了需求规格在将来的开发模式中的重要作用。
687 5
|
2月前
|
人工智能 安全 Java
SpecKit 在成熟 Java 项目中的 AI 编码实践
本文探索AI Code与SpecKit在Java应用中的实践,结合规格驱动开发(SDD)与测试驱动开发(TDD),通过定义原则、需求规格化、技术方案设计等步骤,实现风格统一、可追溯的AI辅助编码。分享选型考量、执行流程及问题优化,总结经验并沉淀为应用级知识资产,提升研发效率与代码规范性。(239字)
1086 13
SpecKit 在成熟 Java 项目中的 AI 编码实践
|
4月前
|
敏捷开发 人工智能 自然语言处理
规格即代码,需求即资产
github新推出的spec-kit介绍了面向AI编码时的全新模式:以规格驱动开发,实现产品与技术无关。同一个产品,只要规格描述到位,后端实现技术可以随时切换,或者多种方案同时提供(反正都是AI自动生成的)。
590 0
|
监控 前端开发 安全
SpringCloud Gateway鉴权和跨域解决方案
SpringCloud Gateway鉴权和跨域解决方案
1948 0
|
10月前
|
Arthas 监控 Java
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
1639 10
|
8月前
|
缓存 安全 Shell
《HarmonyOSNext未成年人守护盾:3分钟搞定全自动分龄保护开发指南》
《HarmonyOS Next未成年人守护盾:3分钟搞定全自动分龄保护开发指南》详解华为“未成年人模式”开发要点,涵盖适龄应用判断、系统接口调用、远程守护等功能,助力开发者快速实现合规的儿童上网保护功能。
|
XML 监控 前端开发
Spring Boot中的WebFlux编程模型
Spring WebFlux 是 Spring Framework 5 引入的响应式编程模型,基于 Reactor 框架,支持非阻塞异步编程,适用于高并发和 I/O 密集型应用。本文介绍 WebFlux 的原理、优势及在 Spring Boot 中的应用,包括添加依赖、编写响应式控制器和服务层实现。WebFlux 提供高性能、快速响应和资源节省等优点,适合现代 Web 应用开发。
1509 15
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
339 0

热门文章

最新文章