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

欢迎!请查看关于页面,了解有关此功能的更多信息。

+6
tools.deps
编辑

目前使用 clj -X:deps prep 命令来准备仅包括在别名中的 :deps:extra-deps 依赖没有直接的方法。添加支持 :aliases 选项,这样就可以准备这些依赖,将非常有用,例如:

clj -X:deps prep :aliases '[:my-alias]'

实际应用案例:在 Metabase,我们有一个 :drivers 别名,它将几个 :local/root 数据仓库驱动子项目添加到我们的类路径中。对于我们的 Spark SQL 驱动,我们需要 AOT 一些 :gen-class 命名空间,我们将其用作代理 JDBC 驱动。目前我们让人们在不同目录中运行 clj -X:deps prep 命令;通过传递别名以供准备,我们可以将此操作合并为一个命令。

JIRA 问题:https://clojure.atlassian.net/browse/CLJ-2652

3 答案

0

编辑

我已经为此问题向 JIRA 问题添加了一个补丁。

0

我们有充分的理由不支持这一功能(例如,机器上的所有项目都共享相同的缓存库路径)。为什么这些驱动程序不能是单独的项目,按需包含?或者提供为工件?

感谢你的快速回复,Alex。让我尝试更详细地解释一下用例。

我们将各个驱动器作为独立的子项目,按需以 `:local/root` 坐标包含。我们有一个 `:drivers` 别名,它包含了我们用于各种本地开发任务的驱动器;我们不会将它们作为顶层 `:deps` 包含,因为我们是用单独的过程构建它们的。

有时我们执行 `clj -M:run`(以便不在类路径上包含驱动器子项目),有时我们执行 `clj -M:drivers:run`(以便包含驱动器子项目)...我们遇到的问题是,没有简单的方法来准备 `:drivers` 别名添加的子项目,除非手动在各自的目录中准备它们。

我想出的解决方案是在一个单独的目录中创建一个示例 `deps.edn` 文件,它包含与 `:drivers` 别名相同的 `:local/root` `:extra-deps`,但位于顶级 `:deps` 下。人们可以 `cd` 到这个目录,而不是单独为每个驱动器目录执行 `clj -X:deps prep`。因此,我们目前首次设置说明基本上是

```
clj -X:deps prep && cd modules/drivers && clj -X:deps prep
```

在两个不同的文件夹中执行两次 `clj -X:deps prep` 并不是那么糟糕,但只需要在 `clj -X:deps prep :aliases '[:drivers]'` 中执行一次(并且不需要创建/维护示例 `deps.edn` 文件)会更好。


可以说,我们可以将需要 AOT 的文件捆绑为单独的工件,但我们确实不想为这些文件打包到 Clojars、设置用于 Maven 仓库的 S3 桶或类似的内容(并设置 CI 以在更改时自动更新),除非必须这样做。此外,它会使在本地调整这些文件和测试更改变得更加困难。

关于影响同一台机器上其他项目的问题

我不确定是否理解了您提到的这些差异原因。我的理解是,这最终并不会与某人手动在项目的顶层 `deps.edn` 中的 `:deps` 下复制粘贴有关别名名中的所有 `:deps`/`:extra-deps` 有任何不同。唯一的区别可能是我们可能预先准备比之前更多的库;但我们准备的方式并没有不同。
by
我想我误解了您的请求,您似乎是想在依赖中指定别名,而不是原始项目中的别名。
by
是的,抱歉如果之前的说明不够清楚。我们只想能够根据是否启用了项目中的一些各种别名来准备我们的项目。
by
添加另一个场景:如果您有一个基于Polylith的项目,通常在最高级别的EDN文件中不会有`:deps` -- 所有用于开发的内容都在`:dev`别名下被引入。

有子项目有自己的`deps.edn`文件,可以有效地通过这个路径准备依赖,但在您最初进行开发的时候,您只有`:dev`别名,因为您还没有 základní konfiguraci, jak vytvořit artefakt (což byste udělali v "projektu")。

我会说,作为一个普遍准则,在`deps.edn`环境中,所有工具都应该允许在计算工具完成其工作时所需的基础时指定`:aliases`(我不是指通过初始CLI调用via -T或-X,而是工具本身应该始终接受一个`:aliases`执行参数,并使用它来计算项目的基础)。
0
by

Clojure CLI预发布版1.10.3.1082增加了对basis修饰符的支持,包括:aliases。

...