请在 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 程序运行时,你正在运行一个工具,任何你在命令行上使用的类路径选项应用于程序,而不是程序所计算的树。

我们仍在讨论如何将类路径修改选项传递给自身作为 -X:deps 程序,可能通过一些标准的选项集或库支持,以便程序计算类路径基础。

谢谢你的回答!这很有道理。

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

那么,这意味着第三方 -X:deps 程序(如库)通常不应依赖于运行时的基础?
-X 程序在工具调用时会注入运行时基础。这个基础将基于您通过别名指定的工具的类路径。如果使用 :replace-deps,则项目基础不会通过 clj 选项包含(或可修改)。如果使用 :extra-deps(例如,一个测试运行器,它增加了您的项目类路径而不是替换它),那么这个基础可能很有用。所以……这取决于。
啊,我懂了(我注意到我有点混淆了“-X:deps 程序”和“-X 程序”)。谢谢你的详细说明!
+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流中,它使用了项目基础,现在 everything is possible but certain previously easy things are now a bit harder.

对我来说,这是一个非常明确的去耦。

(顺便说一句,我将标题和描述编辑为使用 -X:deps,而不是 -Xdeps,这是正确的形式)

...