讨论内容来自Slack
工具通常需要读取 Demp.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 已经使用的各种《 dép edn》文件—系统、用户、项目、命令行—并且必须遵守相当于《-Srepro》的设置,以便在需要的情况下省略用户的《 dép edn》。此外,如果 t.d.a 增强到支持多个“项目”《 dép 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 的每个工具都不得不重复所有那些多文件合并和别名选择。