Maven 是什么?
maven 是 一个包管理工具,主要是解决 传统项目在构建大项目(整合多个框架)时,发生jar包冲突(依赖冲突),多人协同开发(jar包的更新,与发布繁琐)
maven
lib 目录管理
web 项目中使用 maven
有两种方式第一种 是使用 maven模板 创建web 项目(步骤: 左边导航栏选MavenArchetype,在Archetype选择 webapp 这个模板 )
第一种的话里面的模板 比较久了,需要去改web.xml的版本(或者直接删了导入新的web.xml)
第二种就是创建一个普通的maven 项目 然后添加 web框架(跟着 maven web模板 去对比调整目录位置、名称什么的),因为 maven 底层 就是按着那套设置 来运行的(读入web)
直接给项目添加 web 框架 后的目录(这样是不行的,)
改动
没有这样设置会出现的情况就是,web.xml 没有被在 target目录,或者是整个web 项目无法运行(项目可以启动,但是因为web.xml 的配置没有被读取,所以相当于运行了一个空壳的tomcat )
好用的终端命令行
控制台 mvn clean install -X (清除 并 安装)查看maven 构建的细节
关于maven 中添加web 框架支持 的踩坑
maven 中的构建配置问题
需要去看maven 整个构建流程 是否成功,有无警告
需要按照 maven给定 的 maven - web 的模板去配置,maven才会自动
去读取web框架模块
将web 改成 webapp 且 放在main下与java ,resource同级目录
修改后需要去删除之前的 MANIFEST.MF ,让maven重新导入
每次重新编译时,要使用clean 插件将target清除掉,或者手动删除
在pom.xml maven的配置文件上
一定需要配置java 的jdk
不然(可能)会报错 不支持发行版本
Maven不只是导入依赖工具
Maven的生命周期
是需要去了解Maven的生命周期,才能更好的来解决(应付)这些报错。
compile 编译
验证程序的正确性
本地仓库中没有的jar包下载 ----> 中央仓库
本地仓库中有的jar包 -----> 本地仓库
生成target目录(是每次编译的产物)
classes
generate-sources
生成相关的字节码
Maven打包
前面的步骤都会在跑一遍
出现一个项目的jar或者war包 (web 项目打包成 war 包 )
install
将项目生成的包 保存到本地仓库
插件
clean ----- 清除target 产出的文件
依赖的范围
<scope> 标签就是控制依赖的范围,默认(没有 <scope> 时)的依赖范围时编译。依赖范围的设置是影响到后续的打包运行操作的。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.0</version>
<scope>test</scope>
</dependency>
依赖范围 **compile (编译) ** 编译时就需要,最终需要被打包
依赖范围 provided (已提供)编译和测试阶段需要该依赖,运行时环境已经提供了这个依赖,最终不需要被打包。
依赖范围 **test **只做测试编译,不打包
依赖范围 runtime(运行时)编译时不需要,但在测试和运行时需要,最终需要被打包
依赖管理
依赖继承(父子工程)
父工程中 会是使用 properties 标签进行属性配置,来统一管理依赖版本
在子工程的pom.xml中 使用<parent></parent> 引用父工程的pom
继承之后需要依赖还是得去导入,只不过导入的是父工程的,如果父工程没有,则报错
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
依赖传递
看springboot 整合包有多层依赖----所有上层依赖项,都要依赖于基层依赖项
依赖的排出
主要是对于 一些基层的依赖项与 其他的依赖项 有冲突或者不兼容时 使用
对于这个印象比较深刻的就是
做springboot 3 与mybatis 整合时会出现 因为mybatis 中的mysql-connector-j 版本太低(2.8)与spring boot不兼容
(AI 生成的例子)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除 Tomcat 相关的依赖 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加 Jetty 作为嵌入式服务器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
依赖的选择(A为项目)
长度不同,短路优先
A --> B --> C---->D
A--->D
长度相同,先声明优先
父工程依赖的引入( 就是不需要去声明版本 ,在父工程声明并管理 )
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
版权归原作者 weixin_66442229 所有, 如有侵权,请联系我们删除。