账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Maven 依赖调解原则失效?
    58
    0

    都知道 Maven 在出现依赖版本冲突问题时,会用最短路径原则和第一声明原则来解决冲突。但在自己电脑上引入如下依赖,却产生了与期望违背的效果:

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
    
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

    按照两个原则的话,最终引入的应该是版本为 2.6 的包,但实际却引入了版本为 2.4 的包。分析如下:

    > mvn dependency:tree
    [INFO] ------------------------------------------------------------------------
    [INFO] Building mvn-test 1.0.0
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ mvn-yilaitest ---
    [INFO] com.ariclee:mvn-yilaitest:jar:1.0.0
    [INFO] \- commons-io:commons-io:jar:2.4:compile
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.068 s
    [INFO] Finished at: 2019-05-11T16:45:38+08:00
    [INFO] Final Memory: 12M/245M
    [INFO] ------------------------------------------------------------------------

    为什么依赖后声明的却被引入了,这不是违背了第一声明原则吗?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • Maven 依赖调解原则(Dependency Management Strategy)是为了避免在多个项目中共享重复的依赖项。这个原则是通过使用 mvn dependency:tree 命令来解析和显示项目的依赖关系来实现的。

      然而,有时候这个原则可能会失效。这可能是由于以下原因:

      1. 环境问题:如果你在一个开发环境中配置了 mvn dependency:tree 命令,那么这个命令就只会列出在该环境中的依赖项。如果你在其他环境中使用了这个命令,那么可能会得到不完整的依赖树。

      2. 版本问题:如果你使用的是某个特定的 Maven 版本,那么这个命令可能会列出与这个版本不兼容的依赖项。如果在其他环境中使用了这个命令,那么可能会得到不完整的依赖树。

      3. 项目结构问题:如果你的项目结构非常复杂,那么可能需要手动管理依赖关系。如果你在其他环境中使用了这个命令,那么可能会得到不完整的依赖树。

      为了解决这些问题,你可以尝试以下方法:

      1. 在开发环境中配置 mvn dependency:tree 命令,只列出在该环境中的依赖项。

      2. 如果你使用的是某个特定的 Maven 版本,尝试更新到最新版本。

      3. 优化项目结构,使其更清晰易读。例如,可以使用版本控制工具(如 Git)来管理项目依赖关系,或者使用依赖注入技术来管理依赖关系。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部