Maven精简笔记
Maven基本命令#
1.mvn complile
:编译命令,将src/main
目录下的代码以及资源文件进行编译,在项目目录中生成target
目录用来存放编译好的 class 文件等等
2.mvn clean
:清空编译缓存,将生成的target
目录删除,通常情况下当修改代码后未生效就可以尝试清空编译
3.mvn clean complile
:结合命令,在编译之前先清空,推荐使用
4.mvn package
:打包项目,打包好的文件将会放到target
目录下,具体打包格式在pom.xml
文件中配置
5.mvn install
:将 jar 包安装到本地 maven 仓库中
Maven坐标#
Maven 坐标是用来区分依赖包的,坐标由【GroupId】组织名称
,【ArtfactId】模块名称
,【Version】版本号
三部分组成,比如:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
除开基本的三个坐标之外,这里在说一下<scope>
标签,它代表着 jar 包的生效范围,常用的属性有三种:
-
test
:jar包只在测试环境中可以使用,不参与打包 -
compile
:在编译时连同jar包一同编译 -
providid
:正常使用,但不参与打包,告诉maven这个jar包在服务器上已存在
Maven依赖引用#
1. Maven 依赖传递原则
我们创建了 Demo1,Demo2 两个 Maven 项目,Demo1 引用了 Demo2,Demo2 引用了 MySQL 驱动,那么这个 MySQL 驱动在 Demo1 中也可以使用
但是如果 Demo2 中使用了<scope>
标签设置生效范围,那么只能引用compile
范围内的 jar 包
2. Maven 依赖的就近原则
这里有 Demo1,Demo2,Demo3 三个 Maven 项目,它们分别引用了不同版本的相同依赖,如果我们的程序是 Demo1 引用了Demo2、然后 Demo2 引用了 Demo3,那么默认使用就近原则,会使用 Demo1 本身的版本,如果 Demo1 中没有,那么默认使用 Demo2 的版本,如果两个依赖的级别相同,那么就会使用<dependencys>
中最先引用的那个依赖中的版本
3. 如何手动排除Jar包?
Demo1 引用了 Demo2,Demo2 中含有多个 jar 包,但是 Demo1 中根本不需要,这时我们就可以通过使用<exclusions>
标签排除部分不需要的 jar 包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 这里排除了Springboot内嵌的Tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
注意事项:只有packaging
为 jar 的工程才能被引用
Maven继承、聚合#
Meven 中包含三种打包方式,我们可以通过packaging
标签来修改工程打包方式,打包方式为:
jar
:一般工程打包方式war
:web工程打包方式pom
:不会打包成什么,用来做配置用
Maven继承#
创建一个packaging
为 pom 的 Demo1 工程和 jar 类型的 Demo2 工程,在 Demo2 中使用 parent 继承 Demo1,Demo1 中的依赖就会自动继承到 Demo2
如果不希望子工程获取到所有的依赖,在在父工程Demo1中使用<dependencyManagement>
来管理依赖,这样子工程只需要按照自己的需求进行引用,引用父工程中已存在的依赖时可以省略版本号不写
在找不到父工程的情况下可以通过
Maven聚合#
类似上面的工程,Demo1 作为父工程,Demo2 作为子工程,除了 Demo2 之外可能有多可子工程,当我们需要批量执行 maven 命令时就可以将子工程通过<modules>
进行 maven聚合,聚合后的父工程执行一次clean,所有的子工程都会执行,且父工程可以智能按照依赖级别依次执行
作者多数为原创文章 ( 部分转载已标出 ),目前资历尚浅文章内描述可能有误,对此造成的后果深表歉意,如有错误还望指正
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)