你好。
我正在使用Clojure 1.11.1(以及org.clojure/tools.deps "0.18.1354"),但我遇到了传递依赖解析的问题:一些依赖没有被包括在类路径中。
导致此问题的简化场景如下
“依赖树”
my-company/my-lib :mvn/version 5
|_ my-company/base-lib :mvn/version 1
|_ general/some-lib :mvn/version 1.0
|_ general/some-other-lib :mvn/version 1.0
my-company/another-lib :mvn/version 3
|_ my-company/base-lib :mvn/version 2
|_ general/some-lib :mvn/version 1.0
|_ general/some-other-lib :mvn/version 1.0
发生的问题是
传递依赖展开/解析逻辑
add: [my-company/my-lib [5] -> my-company/base-lib [1] -> general/some-lib [1.0]]
add: [my-company/my-lib [5] -> my-company/base-lib [1] -> general/some-lib [1.0] -> general/some-other-lib [1.0]]
add: [my-company/my-lib [5] -> my-company/base-lib [2] -> general/some-lib [1.0]] <== when this arrives the "children" [general/some-other-lib] is not added to the queue because the [general/some-lib [1.0]] has already been "seen" and previously added
然而,依赖“[my-company/my-lib [5] -> my-company/base-lib [1] -> general/some-lib [1.0] -> general/some-other-lib [1.0]]”将会被“拒绝”,因为这有一个 :missing-parent
的错误,因为 "[my-company/my-lib [5] -> my-company/base-lib [1] -> general/some-lib [1.0]]" 被替换为 "[my-company/my-lib [5] -> my-company/base-lib [2] -> general/some-lib [1.0]]"(my-company/base-lib
的新版本)。不幸的是,队列中没有为 general/some-lib [1.0]
的条目,因为它之前被跳过添加,因为它的直接父类 general/some-lib [1.0]
已经被添加(尽管来自不同的“绝对”路径”)。
然后我的项目失败,因为无法在类路径中找到 general/some-other-lib [1.0]
的类/命名空间,因为这个库没有被包含在类路径中。
经过一点调试,我发现问题似乎出在这部分代码中
https://github.com/clojure/tools.deps/blob/master/src/main/clojure/clojure/tools/deps.clj#L230-L240