Maven &引用;“可选”;“范围依赖性”;“提供”;在马文

Maven &引用;“可选”;“范围依赖性”;“提供”;在马文,maven,log4j,dependency-management,Maven,Log4j,Dependency Management,Maven有时有点让我不知所措。。。我已经创建了一个库,它对slf4j和log4j有可选的依赖关系。我所说的可选,是指: 我的库在编译时需要这些日志框架 我的库在运行时不需要它们,但如果它“发现”它们,它将使用它们 目前,我已将该依赖项标记为“可选”和“提供”: log4j log4j 1.2.16 罐子 假如 真的 但是我的一些用户报告了问题,因为他们不需要log4/slf4j。我的依赖关系正确吗?不幸的是,我发现官方文档有点过于抽象,无法理解这个问题。您检查过文档了吗。它很好地描述了

Maven有时有点让我不知所措。。。我已经创建了一个库,它对slf4j和log4j有可选的依赖关系。我所说的可选,是指:

  • 我的库在编译时需要这些日志框架
  • 我的库在运行时不需要它们,但如果它“发现”它们,它将使用它们
目前,我已将该依赖项标记为“可选”和“提供”:


log4j
log4j
1.2.16
罐子
假如
真的
但是我的一些用户报告了问题,因为他们不需要log4/slf4j。我的依赖关系正确吗?不幸的是,我发现官方文档有点过于抽象,无法理解这个问题。

您检查过文档了吗。它很好地描述了您的用例。将依赖项标记为可选不会将它们解析为使用库的应用程序中的可传递依赖项(即使作用域是
compile

与运行时环境将提供的所需依赖项所使用的
provided
不同,
true
依赖项并不一定是必需的(其思想是某些依赖项仅用于项目中的某些功能,如果不使用该功能,则不需要)

如果使用您的库的项目将使用可选依赖项提供的任何功能性,则项目必须声明这些依赖项

由于您的配置对我来说似乎是正确的,我不知道发生问题的原因。可能您的可选依赖项会在您不期望的版本中由其他库解决。这当然会引起问题