从Slack复制的讨论
工具通常会读取deps.edn
环境,就像它是在一组别名下一样,即工具希望看到一种与世界不同的行为,这是工具运行所需的别名。
这涉及到-X.. mvn-pom
的工作原理,以及其他https://github.com/clojure/tools.deps.alpha/wiki/Tools此类工具(如depot
):工具运行所需的环境并不相同于工具用于分析的环境。
depstar
通过将其自身的运行环境作为JAR文件中的一部分,但不包括它自己来“解决”这个问题。这仅因为这是一个非常小的工具,且没有任何外部依赖。您可以覆盖此设置并告诉depstar
使用不同的类路径,但是对于真正希望查看依赖库版本的工具(如mvn-pom
、depot
等)来说,这种方法不可行。
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,那么此过程还应支持这一点。
工具需要的只是一个可以通过以下方式调用的东西
- 别名列表
- 与
-Srepro
等价的功能
- 隐式列表中的
deps.edn
文件,这些文件与 CLI 读取方式相匹配(这种说法是为了规避“额外的 deps.edn
文件”问题,该问题在其他“询问”中已提出,但在此处也以某种方式指定
这里的想法是,工具想要模仿 Clojure CLI 处理 deps.edn
文件、别名和某些其他选项的方式,但目前由 t.d.a 提供的 API 太低级,这使得这个过程变得困难,我们不希望每个基于 t.d.a 的工具都需要复制所有多文件合并和别名选择的过程。