【问题标题】:Ivy Indirect Dependency Listed Twice常春藤间接依赖列出了两次
【发布时间】:2017-05-31 19:25:29
【问题描述】:

我的类路径包含两个不同版本的间接依赖项,我不明白为什么。

我的子项目(“myJar”)依赖于一个“utils”子项目,该子项目依赖于“lib-subprojA”。我有所有这些项目的代码,但它们是专有的,所以我不能发布 sn-ps。

myProject-myJar -> myProject-utils -> lib-subprojA

我对 lib-subprojA 进行了更改;更改前的最后一个版本是 0.0.100-SNAPSHOT。包含我的更改的版本是 0.0.101-SNAPSHOT。 当我查看“myProject-myJar”的类路径时,我发现“lib-subprojA-0.0.100-SNAPSHOT.jar”(旧版本)和“lib-subprojA-0.0.101-SNAPSHOT.jar”(最新版本)。 不知道为什么两者都在类路径中,但我无法编译“myProject-myJar”,因为它使用旧版本的“lib-subprojA”。

这发生在 Eclipse(使用 IvyDE)和 sbt(sbt clean update compile)中。 我不知道为什么解决中间项目(“myProject-utils”)会产生正确的依赖关系,而解决叶子项目(“myProject-myJar”)会带来同一个 JAR 的两个版本(“lib-subprojA”,版本 0.0. 100, 0.0.101)。

这是因为缓存了中间分辨率结果吗?如果是这样,我该如何删除该缓存?

lib-subprojA // Made change here. Old version: 0.0.100; new: 0.0.101
lib-subprojB
myProject-utils: dependency ... name="lib-subprojA"    rev="0.0.+" conf="compile->compile(*),master(*);runtime->runtime(*)"
  resolves to: lib-subprojA-0.0.101-SNAPSHOT.jar
myProject-myJar: dependency ... name="myProject-utils" rev="0.0.+" conf="compile->compile(*),master(*);runtime->runtime(*)"
  resolves to: lib-subprojA-0.0.100-SNAPSHOT.jar, lib-subprojA-0.0.101-SNAPSHOT.jar

【问题讨论】:

  • 要清除缓存,您可以rm -rf ~/.ivy2/cache。在~/.ivy2 中还有一个local 文件夹,您也可以尝试删除它(它存储使用sbt publishLocal 发布的库)。还有一个不错的工具 here 用于查看项目的依赖关系图,这可能有助于缩小范围。
  • ~/.ivy2 删除缓存。问题依然存在。我什至做了很多 lib-subprojA 的构建(没有代码更改)希望版本 0.0.100 被清除。我现在依赖于版本 0.0.100(旧,不好)和 0.0.112(最新)

标签: java scala ivy


【解决方案1】:

事实证明,在 lib-subprojA 的一个配置文件中,我们将 local.ivy.dir 设置为 ${user.home}/ivy2 而不是 ${user.home}/.ivy2。我花了几个小时来跟踪单个句点字符,不超过这个:.

现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 2010-11-06
    • 2012-08-05
    • 2011-10-24
    • 2014-05-07
    • 2012-01-10
    • 2010-10-04
    • 2017-08-06
    相关资源
    最近更新 更多