【发布时间】: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(最新)