如果项目A依赖项目B,项目X依赖项目A,则根据依赖传递的原则,项目X会依赖项目B。如果项目X不需要依赖项目B呢?optional
可选依赖,用在项目A的maven配置中。
<dependency>
<groupId>ProjectB</groupId>
<artifactId>Project-B</artifactId>
<optional>true</optional>
<version>...</version>
</dependency>
如果项目A只依赖了项目B的小部分功能,而且依赖项目A的项目都不需要依赖项目B,则用optional
,此时,依赖项目A的任一个项目X,不会依赖项目B。如果X想要依赖B,需要在X的maven中重新配置依赖B
exclusion
依赖排除,用在项目X的maven配置中。
<dependency>
<groupId>ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>
此时,其他依赖项目A的项目Y,依旧会依赖B,但是只是X不再依赖项目B。
=======================分界线=======================
(简单来说,exclusion是在女儿那里排除了跟姥姥的关系,妈妈的其她女儿,还是认这个姥姥的。optional是在妈妈那里排除了女儿跟姥姥的关系,妈妈的所有女儿和新出生的女儿,都跟姥姥没关系了)