- maven的使用方法
maven是一个后端的自动化构建工具和包管理工具
npm:是一个前端的包管理工具
-
- 第一次创建Maven工程需要做些什么准备工作?
①通过在官网下载maven的Jar包放置在一个不会轻易进行清理删除的文件夹中,并且复制当前jar包所在的路径。
②
在环境变量中进行系统变量的配置(当前系统变量中路径和上图D盘中的repo文件夹中我都放置了maven的jar包所以也是可以正常使用的 正常情况下 两张图片中的路径应该为一致的)
在Path路径中添加变量
③在进行上述设置的完成后 在idea软件中创建一个maven工程还需要以下两个操作
至此才完成了一个创建maven项目工程的基本操作
-
- 对包管理工具的使用:如何在一个Maven工程中引入一个在项目中需要用到的依赖
这是maven工程创建后正常生成的文件结构 正常代码应该写在java包下文件夹中的类里 test包中是用来写测代码的位置 而pom.xml文件就是在maven工程中统一管理项目依赖的地方,也就是导入Jar包的地方;对于Jar包在maven中统一叫作依赖。
在dependencies中添加一组dependency之后 同步Maven
1. 在本地仓库(我们是不是配置过本地仓库的文件夹)中检索对应的jar包是否存在 如果存在 直接引入到当前工程
2. 本地仓库中如果不存在 去中央仓库 / 镜像仓库 按照 gav的文件夹路径找到对应的jar包 下载到本地仓库(也是按照gav路径创建文件夹) 然后再引入到工程中
-
- 导入的依赖一定要放置在dependencies和dependency标签中,可以在相应的网址中找到想要使用的依赖并且进行gav坐标式的导入https://mvnrepository.com/?__cf_chl_captcha_tk__=pmd_Y
YIEllAhfBVmy7fvUDrH5Jpe3PuKgKdytGZvbrBgv3Q-16357
25249-0-gqNtZGzNAyWjcnBszQiR 这个网址。导入后记得同步Maven工程
- maven的生命周期课插件
-
- 生命周期定义了Maven在构建一个工程师的不同阶段应该做些什么事情
①clean:用于清理项目目录 确保之前的构建不会影响新的构建过程
②validate: 验证项目是否正确且所有必要信息是否可用
③compile: 编译项目中的源代码
④test: 使用合适的单元测试框架运行测试代码
⑤package: 将编译后的代码打包成可分发的格式 Jar包形式
⑥verify:对集成测试的结果进行检查 ,以确保质量标准符合要求
⑦install:将包安装到本地仓库中
⑧site: 不属于生命周期的一部分 但属于Maven的站点生成生命周期
⑨deploy: 在构建环境完成后 将最终的包复制到远程仓库或直接部署到生产环境(通常不在本地执行)
-
- 插件是生命周期的执行者:我们可以自己去开发Maven插件 然后通过在pom.xml文件夹中引入进行使用自定义的插件的功能
-
-
- clean: 清理阶段 清理工程中除了源代码以外的文件
- test: 测试阶段 运行当前工程中的所有的测试代码
- package: 打包阶段 根据pom文件中的配置 将工程打成不同格式的包
-
<packaging>jar</packaging>
<!--此处可以写 jar war pom-->
-
-
- install:安装阶段 将当前工程打好的包安装到仓库 默认安装的是本地仓库
-
Maven 自动化构建好友一个体现就是:生命周期的执行是会从头执行到你要执行的生命周期
- maven的控制命令 mvn -version
-
- mvn clean
- mvn compile
- mvn test
- mvn package
- maven依赖传递(如何排除依赖传递)
当你引入了一个依赖 存在了其他依赖 那么这些依赖也会随着这次引入添加到当前工程
依赖传递是一个自动发生现象 如果当前引入的依赖不想让他传递其他依赖 使用exclusions标签 根据ga坐标排除指定依赖
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>note-common</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- maven引入依赖时的作用范围
在Maven中,依赖的scpoe属性用于定义依赖的访问范围和生命周期,这对于管理项目中的依赖非常重要,特别是在大型项目中,Maven支持多种scope,每种scope都有其特定的用途和影响。
常见的scope:
-
- compile(默认):编译依赖范围,表示该依赖在编译和运行时都需要,如果没有明确指定scpoe,则默认为compile
- provided: 提供依赖范围,表示在编译和测试时需要这些库,但在运行时容器已经提供,因此不需要打包进应用。例如,ServletAPI在大多数服务器中已经提供。
- runtime: 运行时依赖范围,表示该依赖只在运行和测试时需要,但不用于编译。
- maven聚合工程
聚合工程是为以后的分布式微服务铺路的 其结构往往是父工程中有多个子模块
-
- 父工程 没有任何的代码 只是子模块的承载体 并且父工程的pom文件 必须打包成pom
-
-
- 子模块A 具体的业务代码 如何开发一个工程就如何开发一个子模块
- 子模块B
- 子模块C
-
-
- 他们之间通过一个pom文件有一个强约束关系 用于管理整个工程的自动化构建和依赖
父工程的pom中 生命modules 标签 定义当前父工程中包含的所有子模块的artifactId
<packaging>pom</packaging>
<modules>
<module>a-module</module>
<module>b-module</module>
<module>c-module</module>
</modules>
子模块中通过添加parent标签 指向父工程的gav坐标。
<parent>
<groupId>org.example</groupId>
<artifactId>parent-son</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>a-module</artifactId>
当声明好强约束关系后 父子工程间的依赖管理 可以通过继承的方式进行 管理的是依赖的版本
-
- dependencyManagement标签的特殊用法(方便快捷)
dependencyManagement声明当前工程及其子模块的依赖版本,也就意味着在一个单体的项目中 使用dependencyManagement同时在使用dependencies一样能起到版本管理的作用,如果以后频繁开发单体应用 但是用到的依赖都想复用一个版本,则需要在dependencyManagement中将所有依赖的版本定义好,在dependencies中不用声明version引入依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
-
- properties标签作用
自定义标签 我们可以在properties中自定义标签 在当前pom文件中通过${}的方式 引用这些标签的值
- Spring-boot框架
是一个基于Spring之上的 再次进行封装的框架
-
- Spring Boot项目一定是依赖于包管理工具的 一定要把Spring-boot的版本修改成2.2.2.RELEASE
- boot-starter名称依赖的作用
-
- 方便我们引入依赖:当我们要引入一个功能的依赖时 往往需要几个jar包的共同配合 比如说 Spring 框架 如果纯粹就Maven工程来做 我们起码需要引入五个依赖 但是我们使用boot-starter的依赖时 是一个依赖就对应一个完整的功能。
- 同时boot-starter依赖也会为这个功能额外的传递其他可能使用的依赖
- bootstarer传递的依赖 都是当前版本之间最兼容的依赖
- bootstarter中的依赖 可以让Spring Boot的自动配置功能识别到 并进行自动配置 极大的简化了开发
- 在Spring Boot项目中 能用spring-boot-starter关键字的依赖就用而不再用之前的依赖
- Spring Boot的特性
-
- 自动配置:默认Spring Boot应用会扫描 启动类所在的包及其所有自包
- 整合MVC时:集成了Tomcat到工程内部 而不是原本的 项目打成war包放到了Tomcat自动配置
- 中文乱码的自动配置
- 静态资源访问的自动配置:spring boot默认对外暴露的可访问的静态资源 统一 存放在 resources下的static中 在访问时 直接用/代表static文件夹 相对路径找下去
- DispatcherServlet的自动配置
- 对于请求体和响应体的JSON数据自动转换成Java Bean或者将Java Bean 自动转换为JSON
- Spring Boot整合Spring MVC
-
- 回顾Spring如何整合MVC框架
-
-
- Web工程: 在Idea中集成Tomcat 打war包 放到Tomcat中
- 引入两个依赖: spring-web 和 spring-webmvc
- 配置dispatchServlet
- 配置静态资源可访问的类型
- 中文乱码的解决等等。。。
-
-
- Spring Boot 整合MVC
-
-
- 引入spring-boot-starter-web
-
- 接口测试工具ApiPost
- Result API 接口风格
-
- 接口URI定义了一组指导规则 不是协议也不是标准
- 指导规则规定了:URI上应该只是资源名称的名词 不再出现行为命名 依赖请求方法定义对当前URI中资源的操作行为。
- 如果需要传递数据 在名词的资源后面 /资源唯一标识的值:
-
-
- 之前:/getUser
- Restful:/user
-
-
-
-
- 获取user 发送GET请求
- 删除user 发送DELETE请求
- 添加user 发送POST请求
-
-
-
-
-
-
- 添加user 往往是一个完整的JSON user数据一般放在POST请求的请求体中
-
-
-
-
-
-
- 修改user 发送PUT请求
-
-
-
-
-
-
- 修改user 往往是将一个完整的JSON user数据放在PUT请求的请求体中
-
-
-
-
- 如果要使用Restful 风格API 传参 这个参数是出现在URI上的服务端的接口定义要有特殊