依赖是什么?
“依赖是maven项目引用的资源jar包,依赖范围就是这些资源架包在maven项目中的作用范围,反过来说,maven项目通过依赖范围来控制何时引用资源jar包。”
关于依赖的问题
我们可以在web.xml中配置依赖,即<dependency>里面,基本格式如图2所示(optional基本配置可不要)
我们告诉xml文件,我们需要的jar包,需要的版本,maven就去仓库中找,找到之后会为我们自动加载(前面博文中有细说maven仓库)
而由于每个项目每个servlet需要的依赖不同,并且servlet与servlet之间存在着依赖传递,则当依赖的jar包有与依赖传递中的jar包有版本冲突时,关于maven到底使用哪一个jar包有如图一所示的处理优先方法。
图1
路径优先即指,依赖的依赖的依赖逐次递减优先级,自己的依赖优先于传递得到的依赖。
另外,在xml文件中后配置的会覆盖前面配置的内容。
图2
现在项目中有两个servlet,01与02;且01中的依赖有a,02中现存的依赖是b
01中配置了02,此时02就依赖传递了,01就有了a,b。
若不想在01中看见02中依赖的b,则可以在02的b依赖中添加<optional></optional>标签,且把属性改为true,如图2所示。
图3
同理,当01自己主动不想要02中传递依赖的b时,可以参考图3所示内容,排除依赖。
图4
在配置依赖时,还可以添加scope标签,表示依赖的作用范围,参数有四个,分别是图4中的compile,test,provided,runtime。compile是默认的,在不添加scope标签时默认取值为compile。
每个标签表示作用范围也如图4所示。
图5
当scope标签遇到依赖传递依赖问题时,若同一个jar包,01中的scope取的是compile,02(间接依赖)取的是runtime,依据图5可知,最后scope取的是runtime范围。
当然,由于在早期的web工程中并不支持@WebServlet注解配置,甚至不支持El表达式(在web 3.0版本之后才支持)在web3.0版本之后的版本也支持注解配置,注解配置就能有效减少jar包配置的臃肿程度。