依赖
依赖关系,可以理解成“USE-A”关系即使用关系。
依赖关系是一种使用关系,如果A类中使用了B类对象,那么就可以说A类依赖B类。
依赖传递
项目A直接依赖项目B,项目B直接依赖项目C,maven会间接地将A依赖C,这就是依赖传递。类/第三方库也是同样的道理。
可选依赖和依赖排除
以上图为例,当需要在项目A中排除对项目C的依赖时,这时又该怎么做呢?Maven 为我们提供了两种解决方案,分别是可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)。
什么时候需要排除依赖?
项目A依赖项目B,但当项目A不是完全依赖项目B的时候,即项目A只用到了项目B的一部分功能,而正巧项目B这部分功能的实现,并不需要依赖于项目C,这个时候,项目A就应该排除对项目C的依赖。
有的人可能有这样的疑问,为什么要排除对项目C的依赖呢?就算包含了对项目C的依赖,也不会出问题啊。事实上,表面上看确实不会出现问题。但是,我们必须记住一点:当我们使用一个工程时,控制实际需要的依赖列表非常重要。而且,排除不必要的依赖还可以帮助我们,节约磁盘、内存等空间,避免许可协议问题以及类路径问题等。我们在享受Maven依赖的自动传递性带给我们的便利的同时,要时刻注意引入冗余、不必要的依赖对我们项目产生的负面影响。
可选依赖(Optional Dependencies)
optional英文意思是可选的,可以让子工程自己决定要不要此依赖
默认为false,表示依赖会传递给子工程,子工程没得选,被迫接受该依赖。
如果为true,表示依赖不会传递给子工程。子工程不会有该依赖。当需要时,子工程可以在pom文件中添加该依赖
<optional>false</optional> //依赖会向下传递给子工程
<optional