Clojure tools.deps :local/root关联时classpath异常加/src/main/clojure问题
异常路径的来源
这个被自动拼接出来的src/main/clojure路径,来自tools.deps内置的Leiningen项目兼容解析逻辑:
- 使用
:local/root关联本地项目时,tools.deps会优先读取目标路径下的deps.edn配置;如果检测到目标路径没有deps.edn,就会自动触发兼容识别逻辑,查找同路径下project.clj等其他构建工具的配置文件。 - 你当前全局配置中使用的
0.5.435版本tools.deps.alpha,其Lein兼容模块存在已知的路径解析问题:没有正确读取project.clj中声明的:source-paths ["src"]配置,而是套用Maven标准项目结构的默认目录约定,自动拼接出根本不存在的src/main/clojure路径加入classpath。 - 当你给被关联的a-proj补上
deps.edn后,识别逻辑直接命中deps配置文件,完全绕开了Lein兼容解析分支,因此生成的classpath就恢复为正确的../a-proj/src路径。
可落地的解决方案
- 最稳妥的方案:给被依赖的本地项目补一个最简
deps.edn,不需要迁移原有Lein的构建流程和依赖配置,只需要声明正确的源码路径即可:
只要项目根目录存在这个文件,{:paths ["src"]}tools.deps就会完全按照该文件的路径配置关联依赖,彻底不会触发Lein兼容识别的逻辑,也就不会额外拼接非预期路径。 - 临时绕开方案:如果不想给遗留老项目新增
deps.edn文件,可以修改依赖声明,把:local/root的路径直接指向项目的实际源码目录,跳过整个本地项目配置解析环节:;; 原写法(会触发兼容识别,拼错路径) a-proj {:local/root "../a-proj"} ;; 修改为直接指向源码目录的写法(绕开识别逻辑) a-proj {:local/root "../a-proj/src"} - 长期优化提示:即便后续升级
tools.deps到更高版本,只要本地项目没有自带deps.edn,兼容识别逻辑依然可能出现非预期的路径拼接问题,给项目补最小化的deps配置是最可控、最不容易出问题的方式。
内容的提问来源于stack exchange,提问作者fraxture
相关产品推荐
相关产品推荐

