本文主要是把当初跳过的maven再看一遍,此时再看发现自己的理解能力也更强了些,然后大家必须将分模块设计与开发熟练掌握,这样可以使我们的代码编写更加清晰,然后私服主要是企业团队将开发上传,这个因为我还没工作,所以只了解了一下,其实用git上传也可以,只不过用私服可以让我们下载企业内部的依赖。
一般为了规范,顺序一般是 parent、maven 坐标、modules、properties
注意install安装到本地仓库指的是安装在自己设置的maven仓库中,然后如果包含就能正常打包了
maven依赖应先从本地仓库查找,如果没有则从私服查找最后才从中央仓库(镜像仓库)下载
一、Maven
可以先idea全局设置配好
配置:



创建maven项目:
版本号一般不用手动设置,采用默认即可

maven坐标:

idea导入maven项目
方式一:

注意直接Remove Module可以将模块从当前工程移除,但磁盘中还没有真正删除。
方式二:
注意导入的是maven项目,所以没有pom肯定就不算也导入不成功。

二、依赖管理
依赖配置
-
依赖:指当前项目运行所需要的 jar 包,一个项目中可以引入多个依赖。
-
配置:
-
在 pom.xml 中编写 <dependencies> 标签
-
在 <dependencies> 标签中 使用 <dependency> 引入坐标
-
定义坐标的 groupId,artifactId,version
-
点击刷新按钮,引入最新加入的坐标
-
依赖传递



直接在pom中右键可以直接查看这些依赖关系图,然后按住ctrl可以放大,alt是望远镜
- 排除依赖 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。
总之就是这个pom中不会包含已排除的依赖,主要针对间接依赖,直接依赖优先级高,比如A依赖B,C,然后排除了C,那么A直接依赖的C仍然生效

依赖范围
依赖的 jar 包,默认情况下,可以在任何地方使用。可以通过<scope>...</scope>设置其作用范围。 作用范围:
-
主程序范围有效。(main 文件夹范围内)
-
测试程序范围有效。(test 文件夹范围内)
-
是否参与打包运行。(package 指令范围内)

默认的package打包只能将当前资源打包进去,而所依赖的jar包不会打进去
生命周期


可以在idea中跳过某个阶段比如test
三、分模块设计与开发
1. 什么是分模块设计?
- 将项目按照功能拆分成若干个子模块
2. 为什么要分模块设计?
- 方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
3. 注意事项
- 分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
主要目的: 方便项目维护、复用、共享等
注意新建模块时检查路径是不是在我们idea中的代码项目中
引入我们的其他模块直接引入我们自己项目的maven坐标依赖即可
继承与聚合
继承
注意和java类似,只能单继承,不能多继承
而且若父子工程都配置了同一个依赖的不同版本,那么以子工程版本为准
jar:普通模块打包,springboot 项目基本都是 jar 包(内嵌 tomcat 运行)因为可以使用命令java-jar就可以直接启动springboot项目
war:普通 web 程序打包,需要部署在外部的 tomcat 服务器中运行 而war包不支持,所以用的少
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理


<!-- 继承Spring Boot父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/> -- 表示父工程的相对路径,因为这个不是自己实现的,是官方提供的,所以从本地/远程仓库查找即可
</parent>
而且由于我们的parent项目是父工程,不用编写代码,所以创建maven父工程之后将src目录可以删除掉
./表示当前目录查找 ../表示上一级目录查找
如果在其他位置,则需要relativePath手动指定一下路径,否则默认是../pom.xml
<parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
groupId如果一样,那么子工程就不用写groupId了,写artifactId和version即可
版本锁定
同一个项目中,引人的依赖应尽量保持一致,而且有的模块可能不用继承父类的依赖,这时候一个个修改版本就很麻烦
<dependencyManagement> 与 <dependencies>的区别是什么?
<dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
<dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖 (无需指定版本)

如果父工程是单纯dependencies则子工程继承之后就会自动携带上

当然自定义命名也要规范有意义,而且放在上边当修改版本时就不用往下滑动了
注意下方的这个依赖不用写在父工程中,因为父工程继承的starterWeb内部已经配置了版本信息,所以不用写,直接引人即可
<!--WEB开发-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
聚合
其实我们的父工程既是继承中的父工程,也是聚合工程
-
聚合 将多个模块组织成一个整体,同时进行项目的构建。
-
聚合工程 一个不具有业务功能的"空"工程(有且仅有一个 pom 文件)
-
作用 快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

总结
-
作用
-
聚合用于快速构建项目
-
继承用于简化依赖配置、统一管理依赖
-
-
相同点:
-
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
-
聚合与继承均属于设计型模块,并无实际的模块内容
-
-
不同点:
-
聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
-
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
-
四、私服
主要是为了团队协作。而且是再局域网中,maven中deploy发布
其实用git也是一样的


仓库组主要是区分中央仓库和共享仓库的
版本: release(正式版) 和 snapshot(快照版本)