maven依赖传递性的2种解决方式

https://blog.csdn.net/hello_word2/article/details/80070483

maven的依赖关系是有传递性的,如:

A-->B,B-->C   ==>   A-->C

Optional Dependencies

当一个项目A依赖另一个项目B时,项目A可能很少一部分功能用到了项目B,此时就可以在A中配置对B的可选依赖。举例来说,一个类似hibernate的项目,它支持对mysql、oracle等各种数据库的支持,但是在引用这个项目时,我们可能只用到其对mysql的支持,此时就可以在这个项目中配置可选依赖。

配置可选依赖的原因:1、节约磁盘、内存等空间;2、避免license许可问题;3、避免类路径问题,等等。

示例:

<project>
  <dependencies>
    
    <dependency>
      <groupId>sample.BgroupId>
      <artifactId>BartifactId>
      <version>1.0version>
      <scope>compilescope>
      <optional>trueoptional> 
    dependency>
  dependencies>
project>

假设以上配置是项目A的配置,即:A --> B。在编译项目A时,是可以正常通过的。如果有一个新的项目X依赖A,即:X -> A。此时项目X就不会依赖项目B了。如果项目X用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。

Dependency Exclusions

当一个项目A依赖项目B,而项目B同时依赖项目C,如果项目A中因为各种原因不想引用项目C,在配置项目B的依赖时,可以排除对C的依赖。


  
    
      sample.B
      B
      1.0-SNAPSHOT
      
        
          *
          *
        
      
    
  

参考资料

你可能感兴趣的:(git)