Maven Optional & Exclusions使用区别

简介: Optional和Exclusions都是用来排除jar包依赖使用的,两者在使用上却是相反。Optional定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。Exclusions则是主动排除子项目传递过来的依赖。

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


相关文章
|
6月前
|
Java Maven Spring
Maven高级-继承、实施步骤及聚合与继承的区别
Maven高级-继承、实施步骤及聚合与继承的区别
72 0
|
4天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
14 3
|
3月前
|
XML Java Maven
Java 中的 Maven 和 Ant 的区别
【8月更文挑战第22天】
155 0
|
Java 测试技术 Maven
maven跳过单元测试-maven.test.skip和skipTests的区别
maven跳过单元测试-maven.test.skip和skipTests的区别
|
6月前
|
Java Linux Apache
Maven的Binary与Source区别
Maven的Binary与Source区别
194 1
|
6月前
|
Java API Maven
maven中scope和optional区别
maven中scope和optional区别
84 1
|
测试技术
Maven-DskipTests和-Dmaven.test.skip=true的区别
Maven-DskipTests和-Dmaven.test.skip=true的区别
245 6
|
6月前
|
Java Maven Spring
StringUtils工具类的maven坐标以及StringUtils.isBlank()和StringUtils.isEmpty()的区别
StringUtils工具类的maven坐标以及StringUtils.isBlank()和StringUtils.isEmpty()的区别
134 0
|
Java Unix Linux
M2_HOME还是MAVEN_HOME配置环境变量,有什么区别?
M2_HOME还是MAVEN_HOME配置环境变量,有什么区别?
289 0
maven工程和模块的区别
maven工程和模块的区别