1.<scope></scope> 指定依赖坐标范围
范围: 编译(main/java) 测试(test/java) 运行/打包
| ||||||||||||||||||||||||||||||
|
1.项目构建
项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
主动触发场景: 重新编译 : 编译不充分, 部分文件没有被编译! 打包 : 独立部署到外部服务器软件,打包部署 部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用 |
- 执行Maven的构建命令
语法: mvn 构建命令 构建命令 ..
清理命令: mvn clean 删除taget文件夹 编译命令: mvn compile 将java源文件编译成class文件 测试命令: mvn test 测试项目,执行test目录的测试用例 注意测试用例的类名必须以Test开头,只执行以Test开头的测试类 打包命令: mvn package 将项目打成jar/war包 安装命令: mvn install 将当前项目放入到maven的本地仓库,供其它项目使用。 要求:执行maven中运行构建相关的命令时,必须进入到项目的pom.xml所在的目录。否则会报错。 也可以直接通过maven--->项目--->Lifecycle生命周期点开--->提供了一套操作。 Validate: 验证工程正确性 Verify :核实。主要是对package检查是否有效 Site: 生成项目的站点文档 Deploy:配置部署,复制到远程仓库 |
可视化方式构建 : 通过maven--->项目--->Lifecycle生命周期点开--->提供了一套操作
4. Package 项目类型,最终被打成什么项目类型
默认:jar jar 指的是普通的java项目打包方式! 项目打成jar包! war 指的是web项目打包方式!项目打成war包! pom不会将项目打包!这个项目作为父工程,被其他工程聚合或者继承! 如果一个项目有子项目就必须是pom类型 <packaging>jar/pom/war</packaging> |
注意:jdk17 和 war包版本插件不匹配,打成war包,需要引入打包插件
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> </plugins> </build> |
5. 依赖关系
如果一个项目需要依赖于另外一个项目或jar包
通过pom.xml 中<dependency>标签引入依赖项目或jar包的坐标
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency>
<dependency> <groupId>com.bdqn</groupId> <artifactId>taobao-goods</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> |
依赖传递
自动下载另一个项目所依赖的所有项目jar包。 |
依赖排除 :阻止某一些jar包的传递,因为这样的jar包传递进来会和其他的jar包冲突
<dependency> |
依赖冲突:短路经优先,只会引入路径最短的jar包 相同长度路径下,声明优先,谁先声明。 <!--jackson--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency> |
1.聚合关系
一个项目拆成了多个工程
如:淘宝项目,拆分成用户,商品,订单。分开编码太麻烦。
商品修改后,需要重新打包发布后,订单引用才会生效。
使用一个总工程,将各个模块工程汇总起来,作为一个完整对应的项目
通过总工程将多个模块可以一起执行和管理。
1. 聚合概念
Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程!! |
2. 聚合作用
1. 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。 2. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。 |
3. 实现步骤
1、创建maven父项目,new-->project-->new Project-->maven项目-->taobao-parent
1. 把src删掉,因为聚合项目通常只是管理子工程 2. 把packaging修改下,默认jar,改成pom,代表是一个逻辑父项目 3. 把子项目管理起来 |
2、创建子模块
父项目--->右键--> new-->子模块 module--> parent选None没有
3. 打开父项目的pom.xml把子项目管理起来
<modules> |
总结:
1.父项目类型必须为pom,父项目会将子项目包含进来。
2.子项目类型不是maven project,而是maven moduel
3. 父项目pom.xml通过<module>标签指定子项目信息
<modules> <module>taobao-orders</module> </modules> |
- 父项目可以统一管理所有的子项目
1.点击父项目的构建命令可以直接对所有的子项目进行编译,打包,安装等。 2.当orders引入goods的模块时,goods模块发生改变,不需要重新安装就可以自动更新。 |
2.继承关系
1. 继承概念
Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。 |
2. 继承作用
作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理! 它的背景是: 1. 对一个比较大型的项目进行了模块拆分。 2. 一个 project 下面,创建了很多个 module。 3. 每一个 module 都需要配置自己的依赖信息。 它背后的需求是: 1. 多个模块要使用同一个框架,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一管理。 2. 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。 通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。 |
3.实现步骤
1、创建maven父项目,new-->project-->maven项目-->taobao-parent
1. 把src删掉,因为聚合项目通常只是管理子工程 2. 把packaging修改下,默认jar,改成pom,当前不是一个具体的包 3. 把子项目管理起来 |
2、创建子模块
父项目--->右键--> new-->子模块 module--> parent选taobao-parent
总结:
- 父项目类型必须为pom
- 子项目类型可以为jar或war.
如果当前子项目是其它项目的父项目,那么也必须为pom.
- 继承关系只是逻辑意义上的继承,父项目没有包含子项目信息
- 子项目的pom.xml中通过<parent>标签指定父项目信息
<parent> <groupId>com.bdqn</groupId> <artifactId>taobao-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> |
- 如果子项目的<groupId>和<version>和父项目相同,可以省略。
- 父项目中<dependencies>配置的jar包坐标依赖将会被所有子项目自动继承。
- 父项目中<dependencyManagement>配置的jar包坐标依赖不会被子项目继承,但是可以统一版本控制。
- <dependencyManagement> 标签
父工程依赖统一管理:如果子项目不继承,需要统一版本,使用dependencyManagement
1.父项目的pom.xml声明版本
<properties> <lombok-version>1.18.26</lombok-version> <mysql-version>8.0.25</mysql-version> </properties> <dependencyManagement> <dependencies> <!--小辣椒--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok-version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-version}</version> </dependency> </dependencyManagement> |
2.子项目的pom.xml引用父项目版本
<dependency> |
-
Maven 核心知识点总结