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

selected
 
最佳答案

是的,这种行为是有意的。当作为 -X:deps 程序运行时,你正在运行一个工具,你在命令行上使用的任何类路径选项应用于程序,而不是应用于程序计算的树。

我们仍在讨论如何将类路径修改选项传达给自带的-X:deps程序,可能还会带有一个标准选项集/和或对计算类路径基础的程序的库支持。

感谢您的回答!这很有道理。

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

这意味着第三方-X:deps程序(比如库)通常不应依赖运行时基础吗?
-X程序在工具调用期间会注入一个运行时基础。这个基础将基于通过别名指定的工具的类路径。如果使用:replace-deps,则项目基础将通过clj选项不包含(或不可修改)。如果使用:extra-deps(例如,一个增强您的项目类路径而不是替换它的测试运行器),那么这个基础可能很有用。因此……这取决于。
啊,我明白了(我发现我把“-X:deps programs”和“-X programs”搞混了)。谢谢您的详细阐述!
+2

从版本0.12.1148-X:deps树包含基础设置

$ 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,这是正确的格式)

...