Maven依赖范围与可传递依赖

Maven依赖范围与可传递依赖,maven,maven-3,Maven,Maven 3,我在学习maven scope时遇到了一个疑问 若一个项目中所有依赖项的范围都是compile,那个么它们也会出现在它的jar中。所以,据说,对于依赖于这个项目A的任何其他项目,比如说B,也会得到A的可传递依赖项。但是它们已经存在于项目A的jar中了?为什么要再次下载它们?它们不在jar中。jar的可传递依赖项不会绑定到jar中,除非您显式构建fat jar,例如使用assembly插件或shade插件 不过,胖罐子并不意味着要成为其他工件的依赖项,它们只意味着要独立运行 对于EAR和WAR,情

我在学习maven scope时遇到了一个疑问


若一个项目中所有依赖项的范围都是compile,那个么它们也会出现在它的jar中。所以,据说,对于依赖于这个项目A的任何其他项目,比如说B,也会得到A的可传递依赖项。但是它们已经存在于项目A的jar中了?为什么要再次下载它们?

它们不在jar中。jar的可传递依赖项不会绑定到jar中,除非您显式构建fat jar,例如使用assembly插件或shade插件

不过,胖罐子并不意味着要成为其他工件的依赖项,它们只意味着要独立运行


对于EAR和WAR,情况是不同的,标准是捆绑所有东西,但WAR和EAR并不是您所依赖的库。

那么,在jar打包的情况下,依赖范围的重要性是什么?如果您希望依赖编译类路径,请使用compile。如果仅用于测试,请使用test;如果仅用于运行时,请使用runtime,则无法在代码中直接使用它。是否仅在运行时需要系统作用域依赖关系?它的类路径值是在项目部署之后定义的吗?现在很少使用范围系统。我会避免的,我只是想从理论上知道