【问题标题】:Maven - Force to use dependencyMaven - 强制使用依赖
【发布时间】:2018-03-05 19:01:32
【问题描述】:

我制作了使用 spring 4.x 版本的自定义依赖项,并将其包含在使用 spring 3.x 版本的项目中。当调用此依赖项中的方法时,它使用 spring 3.x 版本而不是 4.x 的类。是否可以强制此依赖项使用 spring 4.x 而项目本身将使用 spring 3.x?

【问题讨论】:

  • 您需要找到您要覆盖的依赖项并排除它并包含相应的 4.x 依赖项
  • 如果您混合使用 spring 和 max 版本,您也会遇到运行时问题。你将无法做到这一点。使用 spring 3 升级项目或使它们成为单独的运行时。

标签: spring maven dependencies


【解决方案1】:

我认为这是不可能的,因为当最终项目运行时,依赖关系是根据组 ID 和工件 ID 而不是它们的版本来解决的。这就是您的应用程序使用 3.x 依赖项的原因,因为它覆盖了父项目中提到的依赖项。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    是的,如果您将应用程序分开(您可能不想这样做),则可以。另一种方法:您可能会考虑在同一个 JVM 中使用另一个类加载器。然而,这可能会导致更多的问题,尤其是使用 Spring。

    Dzone article 关于从不同版本的库中加载相同的类。

    【讨论】:

      【解决方案3】:

      正如 pvpkiran 所说,您希望从您的自定义工件中排除 spring v3 传递依赖。来自 maven 文档 - Optional Dependencies and Dependency Exclusions:

      <project>
        ...
        <dependencies>
          <dependency>
            <groupId>sample.ProjectA</groupId>
            <artifactId>Project-A</artifactId>
              <version>1.0</version>
              <scope>compile</scope>
              <exclusions>
                <exclusion>  <!-- declare the exclusion here -->
                  <groupId>sample.ProjectB</groupId>
                  <artifactId>Project-B</artifactId>
                </exclusion>
              </exclusions> 
          </dependency>
        </dependencies>
      </project>
      

      【讨论】:

        猜你喜欢
        • 2013-10-23
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多