欢迎!请查看关于页面获取更多信息关于这个网站是如何工作的。
目前,deps.edn的几个部分只在别名下工作。这意味着如果您想通过命令行执行,就必须做以下操作
deps.edn
clojure -Sdeps '{:aliases {:foo {...}}}' -(AMX):foo ...
(例如,对于工具的:replace-deps)
:replace-deps
如果能这样表达就很好
clojure -Salias '{...}' -(AMX) ...
这样您就不需要创建别名,重复输入这个名称两次,并将它包裹在{:aliases ...}内。
{:aliases ...}
记录在https://clojure.atlassian.net/browse/TDEPS-173
这似乎是一个答案而不是问题 - 您想在什么情况下这样做?
我清楚的一个特定场景是想要运行一个不使用项目依赖项的工具,比如
clojure -Sdeps '{:aliases {:a-tool {:replace-deps {my/tool {:mvn/version "..."}} :main-opts ["..."]}}}' -M:a-tool
或者用:exec-fn、:exec-args或-X等替代。
:exec-fn
:exec-args
-X
还有其他不涉及工具的使用案例吗?
另一个用例可能是运行REPL并只为这次执行添加一组REPL特定的依赖...
clojure -Sdeps '{:aliases {:dev {:extra-deps { ... }}}' -A:dev
迄今为止,我在当前的基于别名的做法中遇到了两个问题
src
user.clj
data_readers.clj
:replace-paths []
:mvn/repos
编辑:第2点的复现案例
在以下仓库中: https://github.com/imrekoszo/depslink3_2#missing-replace-paths-repro-case
没有替换路径
> clojure -Srepro -Sdeps '{:aliases {:blank {:replace-deps {}}}}' -M:blank Exception in thread "main" Syntax error compiling at (user.clj:1:1). at clojure.lang.Compiler.load(Compiler.java:7648) at clojure.lang.RT.loadResourceScript(RT.java:381) at clojure.lang.RT.loadResourceScript(RT.java:368) at clojure.lang.RT.maybeLoadResourceScript(RT.java:364) at clojure.lang.RT.doInit(RT.java:486) at clojure.lang.RT.init(RT.java:467) at clojure.main.main(main.java:38) Caused by: java.io.FileNotFoundException: Could not locate net/cgrand/xforms__init.class, net/cgrand/xforms.clj or net/cgrand/xforms.cljc on classpath. at clojure.lang.RT.load(RT.java:462)...
替换路径
> clojure -Srepro -Sdeps '{:aliases {:blank {:replace-deps {} :replace-paths []}}}' -M:blank Clojure 1.10.1 user=>
:aliases/:foo
-M:foo
:replace-paths