【发布时间】:2019-08-23 18:11:44
【问题描述】:
我在学习maven scope,遇到了疑问。
如果项目中所有依赖项的范围,比如 A ,是 compile ,那么它们也将出现在它的 jar 中。所以,据说,对于任何其他项目,比如 B,依赖于这个项目 A,也将获得 A 的传递依赖。但是它们已经存在于项目 A 的 jar 中?为什么要重新下载?
【问题讨论】:
我在学习maven scope,遇到了疑问。
如果项目中所有依赖项的范围,比如 A ,是 compile ,那么它们也将出现在它的 jar 中。所以,据说,对于任何其他项目,比如 B,依赖于这个项目 A,也将获得 A 的传递依赖。但是它们已经存在于项目 A 的 jar 中?为什么要重新下载?
【问题讨论】:
它们不是“存在于罐子中”。 jar 的传递依赖项不会捆绑到 jar 中,除非您明确构建一个 fat jar,例如使用程序集插件或阴影插件。
不过,Fat jar 并不意味着依赖于其他工件,它们只是意味着独立运行。
对于ears 和wars,情况有所不同(标准是捆绑所有东西),但是wars 和ears 并不是你所依赖的库。
【讨论】:
compile。如果只是用于测试,使用test,如果只是用于运行时,使用runtime(那么你不能直接在你的代码中使用它)。
<systempath> 定义?
system 现在很少使用了。我会避免它。