在Liftoff(liftoff.io)中,我们有34个Clojure项目,代码量超过1百万行。我们使用了单仓库,并在从Leiningen切换到Clojure CLI工具时遇到了这个线程中描述的问题。
我认为可以通过在clojure.tools.deps.alpha.reader/slurp-deps
中读取deps.edn文件时将相对路径转换为绝对路径来解决这个问题。这里有一个简短的补丁,建议修复:local/root
坐标中的相对路径。
以下是我们的用例的完整描述
在单仓库中,Clojure CLI的config-dir deps.edn文件可能
包含库中其他部分的相对路径。
例如,让我们考虑以下单仓库。
config/
clojure/
deps.edn
tools/
lint/
deps.edn
src/...
B/
deps.edn
src/..
A/
deps.edn
src/...
假设我们想在
config/clojure/deps.edn中添加一个库范围的linting别名。
{:aliases
{:lint {:extra-deps {acme/lint {:local/root ../../tools/lint}}
:main-opts ["-m" "acme.lint.core"]}}}
开发人员在他们的shell配置中将CLJ_CONFIG设置为“config/clojure/deps.edn”。
Clojure linting代码位于“tools/lint/deps.edn”。
库中的所有项目中(例如,在“A/deps.den”,和
在 ""tools/B/deps.den"",我们希望 clojure -A:lint
能够运行
代码检查器。
然而,在目录A中执行 clojure -A:lint
,会添加
"A/../../tools/lint/src" 到类路径中,而不是
"A/../tools/lint/src" 或 "/path/to/repo/tools/lint/src"。
感谢clojure团队多年来的出色工作!