可选的编译时依赖项如何工作?

Gui*_* F. 5 java maven

在很长一段时间里,我认为在 Java 中要么有两种类型的依赖关系之一:

  • 所需的编译时依赖项(编译时始终需要依赖项)
  • 可能可选的运行时依赖项(可以在运行时解析的依赖项)

最近,我发现编译依赖项也可以是可选的。例如,commons-beanutils被列为 的可选编译依赖JXPath

这怎么行?依赖项真的可以在编译时使用但仍然完全可选吗?

编辑:我可能不清楚。我正在寻找一种在编译时使用依赖项并且同时完全可选的情况,或者解释为什么这种依赖项是不可能的。

Sal*_*lim 3

类可以编译为接口,但在编译期间不需要该接口的实现。运行时需要实现。

例如commons-logging、JPA、JDBC等都是框架,应用程序可以基于这些框架进行编译。在运行时需要一个实现来执行代码。示例实现 - Common Bean utils、Oracle 瘦驱动程序、Eclipse 链接等。