且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Maven如何解决传递依赖的版本冲突?最近获胜策略

更新时间:2022-06-25 06:10:30

我认为依赖解析的工作方式与您描述的完全相同.

I think the dependency resolution works the exact same way you described.

我还认为,如果您将 <scope> 子标签用于您的 <dependency>

I also think your life would be much easier if you use the <scope> child tag to your <dependency>

引用自maven官网:

as quoted from the maven official website:

  1. 编译:这是默认范围,如果未指定则使用.编译依赖项在项目的所有类路径中都可用.此外,这些依赖项会传播到相关项目.
  2. provided:这很像 compile,但表示您希望 JDK 或容器在运行时提供依赖项.例如,在为 Java 企业版构建 Web 应用程序时,您可以将 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为 Web 容器提供了这些类.此范围仅在编译和测试类路径上可用,并且不可传递.
  3. runtime 这个范围表示依赖不是编译所必需的,而是执行所必需的.它位于运行时和测试类路径中,但不在编译类路径中.
  4. test:这个范围表示应用程序正常使用不需要依赖,只在测试编译和执行阶段可用.
  5. system:这个范围类似于提供的,除了你必须提供明确包含它的 JAR.工件始终可用,不会在存储库中查找.
  6. import:(仅适用于 Maven 2.0.9 或更高版本)此范围仅用于该部分中 pom 类型的依赖项.它指示应将指定的 POM 替换为该 POM 部分中的依赖项.由于它们被替换,具有导入范围的依赖项实际上并不参与限制依赖项的传递性.