maven笔记
1、依赖范围【scope】:编译环境(main文件夹)、测试环境(test文件夹)、运行环境(打成的war包是否可用)
compile:测试依赖范围,缺省值上面的三个环境都可用,如log4j。
test:只争对测试classpath有效,如junit。
provided:只对编译环境和测试环境有效,运行阶段外部容器已提供,故不需要额外引入,如servlet-api。
runtime:运行时依赖范围。只对测试环境,运行环境有效,如JDBC驱动实现依赖,其在编译时只需JDK提供的JDBC接口即可,只有测试、运行阶段才需要实现了JDBC接口的驱动。
system:系统依赖范围。效果与provided的依赖范围一致。其用于添加非Maven仓库的本地依赖,通过依赖元素dependency中的systemPath元素指定本地依赖的路径。鉴于使用其会导致项目可移植性降低,一般不推荐使用。
import:导入依赖范围。该依赖范围只能与dependencyManagement元素配合使用,其功能是将目标pom.xml文件中dependencyManagement的配置导入合并到当前pom.xml的dependencyManagement中。
2、Maven工程jar包依赖报错:
可能本地Maven仓库或缓存被污染或损坏,导致Maven无法正确的使用现有依赖。(下载jar包丢包)
解决方案:当jar包下载失败时Maven会在本地仓库生产(lastUpdate文件),Maven检测到(lastUpdate文件)文件后不会重新下载jar包,如下载时没网,后来又有网了也不会下载成功。删除缓存文件,重新下载即可。
3、Build构建配置【打包时的额外配】:
如果在java文件夹中添加java类,会自动打包编译到classes文件夹下。
但是在java文件夹中添加xml文件,默认不会被打包。
resource下的配置文件会被打包到classes根目录下。
应用场景:mybatis中有时会将用于编写SQL语句的映射文件和mapper接口都写在src/main/java下的某个包中,此时映射文件就不会被打包。
<build>
<!---自定义打包名称->
<finalName>jar包名称.war</finalName>
</build>
4、依赖传递:
非compile范围进行依赖传递
使用optional配置终止传递
依赖冲突(传递的依赖已经存在)
解决依赖冲突:路径最短者优先,路径相同,先声明优先。
手动排除依赖。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY