请在 2024 年 Clojure 调查问卷 中分享您的想法!

欢迎!请参阅 关于 页面以了解更多有关本站运作的信息。

+1 投票
tools.deps
编辑

正如标题所说,clj -X:deps tree 忽略了 -Sdeps 选项

$ clj -Sdeps '{:deps {ring/ring-core {:mvn/version "1.9.1"}}}' -X:deps tree
org.clojure/clojure 1.10.2
  . org.clojure/spec.alpha 0.2.194
  . org.clojure/core.specs.alpha 0.2.56

clj -Stree 相比

$ clj -Sdeps '{:deps {ring/ring-core {:mvn/version "1.9.1"}}}' -Stree
org.clojure/clojure 1.10.2
  . org.clojure/spec.alpha 0.2.194
  . org.clojure/core.specs.alpha 0.2.56
ring/ring-core 1.9.1
  . ring/ring-codec 1.1.3
    . commons-codec/commons-codec 1.15
  . commons-io/commons-io 2.6
  . commons-fileupload/commons-fileupload 1.4
    X commons-io/commons-io 2.2 :older-version
  . crypto-random/crypto-random 1.2.0
    X commons-codec/commons-codec 1.6 :older-version
  . crypto-equality/crypto-equality 1.0.0

这种行为是预先设定的吗?如果是,为什么?

我认为这是故意的,因为我发现这种行为源于 这个显然有意的变更,但我仍然不清楚这样做的原因。

顺便说一下,如果我想使用 clj -X:deps tree,我知道有一个如下所示的解决方案

$ clj -Sdeps ... -Strace
$ clj -X:deps tree :file '"trace.edn"'

3 答案

+2 投票

选择
 
最佳答案

是的,这种行为是预期的。当以 -X:deps 程序运行时,您正在运行一个工具,并且您在命令行上使用的任何类路径选项都应用于程序而非程序所计算出的树。

我们还在讨论如何将classpath修改选项传递给-X:deps程序本身,可能是一个标准的选项集,或者对计算classpath基的程序的lib支持。

by
谢谢您的回答!这非常有道理。

> 当作为-X:deps程序运行时,你正在运行一个工具,而你命令行上使用的任何classpath选项都应用于程序本身,而不是程序正在计算的树。

所以,这意味着第三方的-X:deps程序(比如一个库)通常不应该依赖于运行时的基础吗?
by
-X程序在工具调用时获得注入的运行时基础。这个基础将基于您通过别名指定的工具的classpath。如果使用:replace-deps,则项目基础不会被包含(或不可修改)通过clj选项。如果使用:extra-deps(例如,一个测试运行程序,它增强而不是替换你的项目classpath),那么这个基础可能很有用。所以...这取决于。
by
明白了(我发现我对“-X:deps程序”和“-X程序”有些混淆)。谢谢您的详细说明!
+2 投票
by

从版本0.12.1148开始,-X:deps tree接受基础设置

$ clj -X:deps tree :extra '{:deps {ring/ring-core {:mvn/version "1.9.1"}}}'
org.clojure/clojure 1.11.1
  . org.clojure/spec.alpha 0.3.218
  . org.clojure/core.specs.alpha 0.2.62
ring/ring-core 1.9.1
  . ring/ring-codec 1.1.3
    . commons-codec/commons-codec 1.15
  . commons-io/commons-io 2.6
  . commons-fileupload/commons-fileupload 1.4
    X commons-io/commons-io 2.2 :older-version
  . crypto-random/crypto-random 1.2.0
    X commons-codec/commons-codec 1.6 :older-version
  . crypto-equality/crypto-equality 1.0.0

您还可以传递例如别名列表,这非常有用

$ clj -X:deps tree :aliases '[:dev :test]'
+1 投票

编辑

这与其他几个决策以及t.d.a的一些明确设计目标保持一致。

我最近在这个领域对depstar进行了一项(大)改变:在1.0流中,它使用了运行时/注入的基础,某些事情很容易做,但某些事情却不可能做好;在2.0流中,它使用了项目基础,现在所有的事情都是可能的,但某些之前容易做的事情现在变得稍微困难一点。

对我来说,这是一个非常清晰的分解。

(顺便说一下,我已经编辑了标题和描述,使用-X:deps而不是-Xdeps,这是正确的格式)

...