2024 Clojure 状态调查!中分享您的想法。

欢迎!请查看关于页面以了解有关此信息的一些更多信息。

+6
tools.deps
重新标记

从Slack复制讨论

工具通常需要读取deps.edn环境,就像它位于一组别名单下一样,也就是说,工具希望看到的世界就像提供了一组具体的别名单,而这些别名单与工具运行所需的别名单不同。

这涉及到-X.. mvn-pom的工作方式,以及其他在https://github.com/clojure/tools.deps.alpha/wiki/Tools上的工具,例如depot:运行工具的环境与工具想要的用于分析的环境不同。

depstar通过依赖于其运行时环境与放入JAR文件中的内容相同(但排除自身)来“解决”这个问题。这只有在它是一个非常小的工具且没有外部依赖项的情况下才是可行的。您可以覆盖此设置并告诉depstar使用不同的类路径,但对于像mvn-pomdepot等真正希望查看依赖项版本的工具,这种方法不起作用。

Alex Miller说:“datomic ion开发工具是另一个例子。”

Michiel Borkent说:“我也有几个工具只是接收一个--classpath参数。但是这取决于工具。对于mvn-pom来说,这可能不太方便,而且用列表解析版本可能更好。”

此处“提问”的澄清,以及Alex提供的补充:这个过程必须考虑CLI已经使用的各种deps.edn文件(系统、用户、项目、命令行)-- 必须尊重等价于-Srepro的选项,以便可以省略用户deps.edn。此外,如果t.d.a增强支持多个“项目”deps.edn文件,按照https://ask.clojure.org/index.php/9849/teams-common-dependencies-tooling-across-multiple-projects,那么这个过程也应支持此功能。

工具需要的,是在t.d.a中可以调用的某些东西。

  • 别名列表
  • -Srepro等价的选项
  • 默认的deps.edn文件列表,这些文件与CLI的读取方式匹配(这属于模糊措辞,以允许在该“询问”的另一个内容中提出的“额外的deps.edn文件”以某种方式在此处指定)

在这里的想法是,工具希望模仿Clojure CLI处理deps.edn文件、别名以及某些其他选项的方式,但t.d.a当前暴露的API太低级,无法轻松实现这一点,我们不希望每个基于t.d.a的工具都必须重复所有多文件合并和别名选择。

3 个答案

+1

选择
太好了!谢谢!
0

编辑

可以将 tools.deps 作为库使用

(require '[clojure.tools.deps.alpha :as deps]
         '[clojure.java.io :as io])

(let [aliases [:repl :dev]
      deps (deps/slurp-deps (io/file "deps.edn"))]
  (-> deps
      (deps/calc-basis
        {:resolve-args (deps/combine-aliases deps aliases)
         :classpath-args (deps/combine-aliases deps aliases)})
      :classpath
      keys))
; => ...classpath for given aliases

如果工具生态系统如果 mvn-pom 和其他构建工具接受基础而非别名列表,并且在工具边缘的单一点进行别名+deps.edn到基础的转换,那会更好。

这并不是对这个问题的回答(而且我已经知道如何使用 tools.deps.alpha)。
0

编辑

我想这与这个的部分"《code>deps文件列表"只有一点相关,即目前虽然可以通过使用-Srepro

编辑:这已经记录在 https://ask.clojure.org/index.php/9857/could-option-that-variant-sdeps-avoid-having-specify-alias(感谢Sean)

 这就是按照 https://clojure.org/reference/deps_and_cli#_replace_project_environment_tool 中的说明使用 :replace-deps 和 :replace-paths 的目的 -- 您可以在用户级的 deps.edn 或命令行中声明一个工具的别名,并且它将恰好使用那些依赖项/路径(它不完全符合您的建议,但应该主要解决该用例)。
是的,这样确实可以工作。然而:a) 您需要一个别名,并且不能仅使用 -Sdeps 而不设置别名;b) 仍然会读取本地的 deps.edn,因此在那个文件中的任何语法(以及潜在的其它)错误都可能导致工具无法运行,即使该工具与本地 deps.edn 没有关系。
这两个观点都是正确的,我也常常因为必须在 -Sdeps 中指定别名来解决这个问题而感到烦恼。如果能有一种 -Sdeps 的变体,表现得就像是某个别名下的部分一样,并且该别名可以由工具自动选择,那会很方便。
...