<optional>true</optional>
ccc依赖了bbb,bbb依赖了aaa,那么ccc可能用到aaa,也可能用不到aaa
bbb中引入的aaa需要加上<optional>true</optional>,如果ccc需要aaa的功能,需要ccc自己引入aaa
这就是可选依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
scope=compile,表示编译、测试、运行都需要
scope=test,表示测试用例编译、执行需要,junit
scope=provided,表示编译、测试阶段需要这个包,运行时不需要,会由容器提供,如servlet-api
scope=runtime,表示运行时才需要,比如mysql、oracle等方言包
scope=system,表示该包需要从本地具体的路径提供,配合<systempath>使用,比如自己打的jar包