1. 场景分析
POM依赖具有传递性性,如下demo所示:
Project-A
-> Project-B
-> Project-D <! -- This dependency should be excluded -->
-> Project-E
-> Project-F
-> Project C
项目A依赖项目B与项目C,项目D依赖于项目E与项目F,默认的话,项目A将依赖于B,C,D,E,F。2.可选依赖(optional)
假如上述场景中,D中依赖的项目丢失(既在仓库中找不到),并且A 的项目中依赖的B中所涉及到的功能不需要涉及到的D的功能,项目B的开发人员可以通过在对项目D的依赖中加入在<optionial>true</optionial>,如下所示:
<dependency>
<groupId>sample.rojectD</groupId>
<artifactId>ProjectD</artifactId>
<version>1.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
(备注:上述依赖只对于开发中的项目可以行,如果对于依赖的其他项目,则需要更改底层的pom文件)3.排除依赖
当上述demo项目中,B引用的D项目过时(既旧版本)或者不需要用到D中功能,此时可以用排除依赖。此时,A的POM引用文件如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
...
<dependencies>
<dependency>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>sample.ProjectD</groupId> <!-- Exclude Project-D from Project-B -->
<artifactId>Project-D</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
(备注:在引用多个子项目的时候,如果多个子项目引用了相同的包,此时就要用排除依赖,避免版本冲突)过滤版本也可以使用通配符进行过滤,如下:
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>