Java基础 - Maven的基础使用
一、如何在maven仓库中寻找某个依赖的合适版本
maven中央仓库地址:Maven Repository: Search/Browse/Explore
比如我们要搜索下面这个依赖的maven版本:
<dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter</artifactId> <version>1.0.0-M6.1</version> </dependency>1. 打开网址,搜索框输入artifactId即spring-ai-alibaba-starter
2. 观察我们要搜索的依赖groupId是com.alibaba.cloud.ai,观察到第1个与我们的groupId和artifactId完全对应,我们点击进去,然后点击Versions,看到不同版本。选择USAGES较多的那个尝试和我们的项目兼容。点击进去。
3. 可以看到下面的maven依赖,直接复制到我们项目的pom文件里即可。
可以观察到有个Scope (作用范围)按钮:
二、Maven的scope范围,选择标准是什么
1. compile(默认)
适用标准:业务代码编译、运行都要直接使用该类,需要打进最终 jar/war 包,可传递依赖。示例:spring-ai-mcp-client-starter、spring-core、工具类包。
2. test
适用标准:只单元测试 / 集成测试代码使用,业务主代码完全不引用,不打包、不传递。示例:junit、mockito、spring-test。
3. provided
适用标准:编译时需要 API,但是部署环境 / 容器运行时已经自带该包,不能打进包(防止冲突)。示例:servlet-api、tomcat 自带包。
4. runtime
适用标准:业务代码只通过接口调用,编译时不需要该实现类,只有运行时才加载,需要打进包。示例:mysql 驱动、jdbc 实现包。
快速判断流程
- 业务代码import直接使用 → compile
- 仅测试代码使用 → test
- 编译要用、部署环境自带→ provided
- 编译不用、运行必须加载实现 → runtime
面试精简总结
根据依赖在【编译、运行、环境是否自带、是否打入产物】四个维度判断:业务直接编码引用用 compile;仅测试使用用 test;容器已内置用 provided;仅运行时加载实现用 runtime。
