从 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,则此过程还应支持这一点。
工具所需的,是在t.d.a中可以调用的某个功能。
- 别名列表
- 与
-Srepro
等效的选项
- 隐式列表的
deps.edn
文件,这些文件匹配CLI读取的方式(这个描述是为了模糊其言辞,以便于“额外deps.edn
文件”在另一个“询问”中得以在此处指定
这里的理念是,工具想要模仿Clojure CLI如何处理deps.edn
文件和别名以及某些其他选项,但当前t.d.a公开的API太低级,无法轻松实现,我们也不想让每个基于t.d.a的工具都不得不重复所有这些多文件合并和别名选择的工作。