且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Maven之Optional 与Exclusions(可选依赖与排除依赖)

更新时间:2022-02-22 21:55:41

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>

参考链接:http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html