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
by
edited by

为这个问题添加了一个补丁到JIRA问题

0
by

我们不支持这一点有很多合理的理由(例如,机器上的所有项目都共享相同的缓存库路径)。为什么这些驱动程序不能放在各自的项目中,并根据需要包含进来?或者提供为 artifacts?

by
感谢你快速的回复,Alex。让我更详细地解释一下使用场景

我们将各自的驱动程序作为单独的子项目,并根据需要作为 `:local/root` 坐标包含进来。我们有一个包含用于各种本地开发任务的驱动程序的 `:drivers` 别名;我们不将其作为顶级 `:deps` 包括进去,因为我们是用一个不同的过程构建的。

有时我们执行 `clj -M:run`(以便不将驱动程序子项目包括在类路径中),有时我们执行 `clj -M:drivers:run`(以便包括驱动程序子项目)...我们遇到的问题是,除了手动手动 `cd` 到每个各自的目录并单独准备它们之外,没有简单的方法来准备 `: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` 并不是什么大问题,但仅在执行一次(不创建/维护虚拟的 `deps.edn` 文件)`clj -X:deps prep :aliases '[:drivers]'` 会好得多。


可以说,我们可以将这些需要AOT处理的文件打包成单独的组件,但如果没有必要,真的不想将它们推向Clojars,或者搭建一个S3存储桶来作为Maven仓库等(还需要设置CI以在更改时自动更新)。此外,这还会使得本地调整这些文件以及测试更改变得更加困难。

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

我不太确定是否理解了为何这会带来任何不同。我的理解是,最终这和有人手动将问题别名的所有 `:deps`/`:extra-deps` 复制粘贴到项目顶层 `deps.edn` 中的 `:deps` 然后运行 `clj -X:deps prep` 是一样的。(唯一的区别是我们可能会准备比以前更多的库;但我们不会以任何不同的方式准备这些内容。)
by
我想我误解了您的请求,您可能想要指定在一个依赖项中的别名,而不是原始项目中的别名。
by
没错,抱歉如果我没有表达清楚。我们只是希望能够在有无各种别名生效的情况下准备好我们的项目。
by
补充另一个场景:如果你有一个Polylith项目,通常顶层EDN文件中不会有`:deps`条目——所有开发所用到的都是通过`:dev`别名引入的。

存在有副项目的`deps.edn`文件,它允许你通过该路径准备依赖,但在你最初进行开发时,你只有`:dev`别名,因为你还没有达到声明如何构建组件的阶段(这是在一个“项目”中你会做的事情)。

我可以说,根据一般规则,任何在deps.edn环境下使用的工具都应该允许指定:aliases,以用于计算工具执行所需的基础(这里不指通过初始CLI调用中的-T或-X进行指定,而是工具本身应始终接受:aliases执行参数,并使用它来计算项目的基础)。
0

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

...