You need to enable JavaScript to run this app. Clojure tools.deps :local/root关联时classpath异常加/src/main/clojure问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 13:45:02