【问题标题】:Maven dependency scope vs Transitive dependencyMaven 依赖范围与传递依赖
【发布时间】:2019-08-23 18:11:44
【问题描述】:

我在学习maven scope,遇到了疑问。

如果项目中所有依赖项的范围,比如 A ,是 compile ,那么它们也将出现在它的 jar 中。所以,据说,对于任何其他项目,比如 B,依赖于这个项目 A,也将获得 A 的传递依赖。但是它们已经存在于项目 A 的 jar 中?为什么要重新下载?

【问题讨论】:

    标签: maven maven-3


    【解决方案1】:

    它们不是“存在于罐子中”。 jar 的传递依赖项不会捆绑到 jar 中,除非您明确构建一个 fat jar,例如使用程序集插件或阴影插件。

    不过,Fat jar 并不意味着依赖于其他工件,它们只是意味着独立运行。

    对于ears 和wars,情况有所不同(标准是捆绑所有东西),但是wars 和ears 并不是你所依赖的库。

    【讨论】:

    • 那么在jar打包的情况下,依赖范围的重要性是什么?
    • 如果你想依赖编译类路径,使用compile。如果只是用于测试,使用test,如果只是用于运行时,使用runtime(那么你不能直接在你的代码中使用它)。
    • 是否仅在运行时需要系统范围依赖?即使在项目部署之后,它的类路径值是否也会变为 <systempath> 定义?
    • Scope system 现在很少使用了。我会避免它。
    • 我只是为了理论目的而想知道
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2014-02-24
    • 2018-07-06
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多