optional是maven依赖jar时的一个选项,表示该依赖是可选的,不会被依赖传递。
<optional>true</optional>
A项目的pom中依赖了system-local-api
<dependency>
<groupId>com.sinosoft</groupId>
<artifactId>system-local-api</artifactId>
<version>1.0.0</version>
</dependency>
B项目依赖了A项目
因为maven有依赖传递机制,那么B项目就会有system-local-api的jar包,实际上在B项目中不一定要使用system-local-api,那么我们项目中就会有多余的依赖,
当这种情况时越来越多时,最后整个项目的jar包就有很多的多余依赖,导致项目很臃肿。此时可以设置optional为true,就不会传递给B项目。
<dependency>
<groupId>com.sinosoft</groupId>
<artifactId>system-local-api</artifactId>
<version>1.0.0</version>
<optional>true</optional>
</dependency>
当你开发的组件时,有一个功能,有多种实现方式的jar可以提供,但是实际只会使用一种的情况下。可以把实现的jar包设置成:true。
即依赖时可以自行选择需要什么功能,只提供项目需要的jar,而不是默认全部都给你。