一、optional

在 Maven 的 <dependency> 配置中,<optional>true</optional> 的意思是:

这个依赖是可选的,也就是说,它不会被传递到依赖当前项目的其他项目中


2、举个例子来说明:

假设你有三个项目:

  • project-A(是一个库)
  • project-B(依赖 project-A)
  • project-C(依赖 project-B)

如果在 project-A 的某个依赖中设置了 <optional>true</optional>,那么这个依赖只会作用于 project-A,而不会自动传递给 project-Bproject-C


3、在这个例子中:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <optional>true</optional>
</dependency>

这段配置表示:

  • 当前项目需要使用 MySQL 的 JDBC 驱动。
  • 但如果你的项目作为一个库被其他项目依赖时,MySQL 驱动不会自动成为那些项目的依赖
  • 换句话说,其他项目如果也需要用到 MySQL 驱动,就必须自己显式地声明这个依赖

4、为什么要设置为 optional?

  1. 避免不必要的依赖传递:有些依赖只在当前项目内部使用(比如测试或特定功能),不希望污染使用你这个库的其他项目。
  2. 版本控制:防止多个库引入不同版本的相同依赖导致冲突。
  3. 轻量化依赖:减少最终构建产物的体积和复杂性。

5、总结

设置含义
<optional>true</optional>表示该依赖是“可选的”,不会被传递给依赖本项目的其他项目。
<optional>false</optional> 或未设置表示该依赖会被默认传递下去。