一、jar包管理
1.引入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<scope>标签用来指定依赖范围
(1)compile: 编译依赖范围。
默认的依赖范围,使用此依赖范围对编译、测试、运行都有效。
(2)test: 测试依赖范围。
使用此依赖范围只对测试有效。
(3)provided: 已提供的依赖范围。
使用此依赖范围会对编译和测试有效,对运行无效。
(4)runtime: 运行时的依赖范围。
使用此依赖范围会对测试和运行有效,对于编译无效。
(5)system: 系统依赖范围。
和provided依赖范围完全一样。
(6)import: 导入依赖范围。
此依赖范围只会在<dependencyManagement>标签中使用,将依赖一个POM类型的项目中的所有依赖全部导入到目标项目中来。要用到此依赖范围必须要声明<type>pom</type>。
注:type标签用来指明依赖需要引入的类型(jar、war、pom等),默认为jar。
2.排除依赖
pom中引入的第三方依赖中还依赖了其他的第三方依赖,maven会将所有直接依赖和间接依赖的jar包都下载到本地,如果我们不需要某个间接依赖的jar包,需要将该jar包依赖排除
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
3.依赖传递
<optional>标签不设置默认为false,表示传递依赖;true表示不传递依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<optional>true</optional>
</dependency>
4.模块聚合
<!--聚合的模块-->
<modules>
<module>dubbo-base</module>
<module>dubbo-framework</module>
<module>dubbo-config</module>
<module>dubbo-registory</module>
<module>dubbo-core</module>
<module>dubbo-test</module>
</modules>
<!--打包类型定-->
<packaging>pom</packaging>
直接对打包类型为pom的模块进行生命周期的管理,Maven会自动帮我们管理聚合的所有模块的生命周期,操作顺序跟依赖顺序有关系
5.模块继承
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.14</version>
<relativePath/>
</parent>
通过模块继承可以实现在子工程中沿用父工程中的配置,在父工程中定义统一的依赖管理,这样可以避免项目构建时出现依赖冲突问题
6.这里推荐一个常用的idea插件Maven Helper
下载安装
进入Dependency Analyzer界面
当我们解决依赖冲突时,可以按下图步骤点击Exclude,插件会自动在我们的pom文件中对应的位置添加<exclusion>的相关代码,快速的进行依赖排除
二、maven生命周期
1.idae中体现的maven生命周期
clean(清理):清理本地的target目录
validate(校验):校验项目是否正确并且可以完成项目的构建过程
compile(编译):编译项目的源代码
test(测试):使用合适的单元测试框架运行测试
package(打包):将编译后的代码打包成可分发格式的文件
verify(验证):运行任意的检查来验证项目包有效且达到质量标准
install(安装):安装项目包到本地maven仓库,这样项目包可用作其他本地项目的依赖
site(站点):生成项目的站点文档
deploy(部署):将最终的项目包复制推送到远程仓库中
注:在Idea中点击这几个生命周期时,Maven会自动将之前所有的生命周期都执行一遍
本次先总结到这里,之后有新的内容随时补充。