Maven:什么是"运行时"范围目的?

ele*_*ype 96 maven

可能重复:
了解编译与运行时依赖关系

我理解在运行时而不是在编译时可以使用"运行时"作用域的依赖项.但我不明白为什么你会这么想!为什么不简单地使用"编译"范围呢?

文档没有真正的帮助.任何的想法?

Joh*_*fer 122

运行时对于单元测试和运行时所需的依赖性非常有用,但在编译时则不行.这通常可以是动态加载的代码,例如JDBC驱动程序,它们不直接在程序代码中引用.

将依赖项设置为运行时可确保不会对代码产生意外依赖,并且还会使依赖项不具有传递性.因此,例如,如果模块A对库X具有运行时依赖性,并且模块B依赖于模块A,则它继承对库X的依赖性.使用"提供"或"编译" 导致B依赖于X. .

  • 但是这个链接:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html说提供的内容不具有传递性.那是错的吗? (8认同)
  • 广告传递依赖,我有一个相反的例子.将依赖项的范围从"runtime"更改为"provided"后,其传递依赖性不再是构建的一部分. (8认同)
  • 运行时 *IS* 可传递,尽管这似乎违反直觉。就 maven 的行为而言,我真的看不出编译和运行时之间有任何区别。 (2认同)
  • 我不同意最后一句话,如下所述:/sf/answers/465302491/。使用“compile”会导致 B 依赖于 X。使用“provided”会导致 B 必须明确地重新声明对 X 的依赖。 (2认同)