June 10, 2020
By: Kevin
Leiningen依赖冲突的解决
现象
工程有多多个jar依赖的时候, 遇到版本冲突的情况比较普遍. 一般是我们在project.clj中更新一个依赖以后, 发现工程起不来了.
执行 lein deps :tree 能看到类似提示
✗ lein deps :tree
Possibly confusing dependencies found:
[com.taoensso/timbre "4.10.0"] -> [com.taoensso/encore "2.91.0"]
overrides
[com.taoensso/sente "1.15.0"] -> [com.taoensso/encore "2.117.0"]
Consider using these exclusions:
[com.taoensso/sente "1.15.0" :exclusions [com.taoensso/encore]]
解决方案
- 调整依赖顺序: 和maven一样, 依赖库的版本以首先遇到版本, 也就是下面A的依赖版本
:dependencies [[library-A-with-OLD-encore-dep "version"] ; A 的的依赖版本更早
[library-B-with-NEW-encore-dep "version"]]
:dependencies [[library-B-with-NEW-encore-dep "version"] ; B above A (fixed!)
[library-A-with-OLD-encore-dep "version"]]
- 明确写明依赖库的版本
:dependencies [[com.taoensso/encore "latest-version"]
[library-A-with-OLD-encore-dep "version"]
[library-B-with-NEW-encore-dep "version"]]
诡异问题
如果遇到修改后的依赖的ns找不到, 尝试用 lein clean 来清除项目编译的中间产物, 然后再来一遍.