Optional和Exclusions都是用來排除jar包依賴使用的,兩者在使用上卻是相反。
Optional定義后,該依賴只能在本項目中傳遞,不會傳遞到引用該項目的父項目中,父項目需要主動引用該依賴才行。
Exclusions則是主動排除子項目傳遞過來的依賴。
用法區別
Project-X -> Project-A
Project-A -> Project-B
<project>
...
<dependencies>
<dependency>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
<version>1.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
</dependencies>
</project>
如上X依賴A,A依賴B用的<optional>true</optional>
,這時B只能在A中使用,而不會主動傳遞到X中,X需要主動引用B才有B的依賴。
如果A不用<optional>true</optional>
引用B,則會傳遞到X中,X如果不需要B則需要主動排除A傳遞過來的B。
<dependencies>
<dependency>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
所以,Optional和Exclusions都是用來控制依賴的傳遞,可以根據實際場景靈活應用。
更多具體的定義即說明可參考官方說明文檔:
http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html