欢迎!请查看关于页面以获取更多关于如何使用本网站的信息。
如果一个别名或使用 -Sdeps 的工具调用通过 :replace-deps 丢弃了一个项目的依赖项,那么该项目的一些或所有命名空间可能因为类路径中缺少这些要求而变得无法加载。
:replace-deps
如果项目默认路径中存在一些在 Clojure 启动时自动加载的文件(如 user.clj),则工具调用可能会失败。通过同时指定 :replace-paths [] 来解决这个问题是一个好的办法,但这似乎并不是众所周知的方法(示例 1,示例 2,示例 3)。
user.clj
:replace-paths []
我很好奇,是否常见此类工具有时用它们自己的依赖项来替换项目的依赖项,但仍使用项目的路径?我相信在大多数情况下,工具在编写时并不知道它将在哪个项目中使用,因此不应该期待在项目的路径中找到任何有用的内容。
为了简化工具调用设置,让 :replace-deps 默认推断 :replace-paths [] 除非明确指定,或者在类似方向上做这件事,对我来说似乎是合理的。
重现案例可以在 https://github.com/imrekoszo/depslink3_2#missing-replace-paths-repro-case 找到。
迁移自 https://ask.clojure.org/index.php/9857/could-option-that-variant-sdeps-avoid-having-specify-alias?show=9884#a9884
编辑:更新首段以引用 replace-deps 而不是 replace-paths。我不知道为什么我一开始在那里写了 replace-paths,这是关于 replace-deps 的问题 :)。
更新:根据 Alex 的说法,情况并不是这样:https://ask.clojure.org/index.php/11522/x-deps-might-fail-when-user-clj-requires-something?show=11526#c11526
或许是个好主意,让我再考虑一下。