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

欢迎!请参阅关于页面以了解有关该工作方式的更多信息。

+6
tools.deps
编辑

目前使用clj -X:deps prep准备别名中只包含:deps:extra-deps的依赖项时没有途径。添加对:aliases选项的支持,以便准备这些依赖项将非常有用,例如:

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

实际用例:在 Metabase,我们有一个添加几个:local/root数据仓库驱动子项目到我们的类路径的:drivers别名。对于我们的 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` 别名添加的子项目,除非手动 `cd` 到每个各自的目录并单独准备它们。

我想到的解决方案是在一个单独的目录中创建一个虚拟的 `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(Ahead-of-Time)编译的文件捆绑成单独的工件,但将它们推送到 Clojars、设置一个用作 Maven 存储库的 S3 存储桶,或者类似的东西(并设置 CI 来在更改时自动更新它)并不是我真正想要做的事情,如果没有必要的话。此外,它会使在本地调整这些文件并测试更改变得更加困难。

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

我不太清楚为什么这会有所不同。我的理解是,这最终不会与有人手动将疑虑别名的所有 `:deps`/`:extra-deps` 复制粘贴到项目的顶层 `:deps` 的 `deps.edn` 中并运行 `clj -X:deps prep` 有任何不同。(唯一的不同是我们可能会准备比之前更多的库,但我们准备库的方式并没有不同。)
我认为我误读了您的请求,以为您是想在依赖项中指定别名,而不是在原始项目中指定别名。
是的,很抱歉我没有表述清楚。我们只是想能够在某些或全部别名生效的情况下准备好我们的项目。
提出另一个情景:如果您有一个基于 Polylith 的项目,通常在顶级 EDN 文件中没有 :deps -- 开发时所有内容均通过 :dev 别名引入。

存在具有自己的 deps.edn 子项目,这可以让您通过该路径准备依赖项,但在最初开发时,您只有一个 :dev 别名,因为您还没有声明如何构建工件(这在“项目”中会这样做)。

我认为,作为一个普遍的做法,在 deps.edn 环境中的任何工具都应允许在计算工具工作所需的基础时指定 :aliases(我不是指通过初始 CLI 调用 -T 或 -X 进行指定,而是工具本身应始终接受一个 :aliases 执行参数并使用它来计算项目的基础)。
0

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

...