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 驱动程序,我们需要对用作代理 JDBC 驱动的几个 :gen-class 命名空间进行 AOT。目前,我们让人们在不同目录中运行 clj -X:deps prep;将别名传递给 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或者设置一个S3存储桶作为Maven仓库或者类似的东西(并设置CI自动化更新),这不是我真正想做的事情。另外,这将使得在本地调整这些文件和测试更改更加困难。

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

我不确定我是否理解了为什么这会有差别。我的理解是,这最终不会与手动将相关的`:deps`/`:extra-deps`别名全部复制粘贴到项目的顶层`deps.edn`文件的`:deps`部分,然后执行`clj -X:deps prep`有所不同。(唯一的不同可能是我们可能准备比正常更多的库;但我们并不是用不同的方式来准备这些库。)
我想我误解了您的请求,您是想指定一个dep中的别名,而不是原始项目的别名。
是的,抱歉如果我没有表达清楚。我们只是想要能够添加或移除各种别名以准备我们的项目。
增加另一种场景:如果你有一个基于Polylith的项目,通常在顶层EDN文件中没有`:deps`字段 -- 所有用于开发的内容都是在`:dev`别名下引入的。

有子项目拥有自己的`deps.edn`文件,这实际上允许你通过这条路径准备依赖,但在最初的开发过程中,你只有`:dev`别名,因为你还没有进一步确定如何构建工件(这通常是在“项目”中做的)。

我想指出,就一般做法而言,`deps.edn`环境中的任何和所有工具都应该在确定工具工作的基础时允许指定`:aliases`(我说的不是通过-T或-X选项进行初始CLI调用,而是工具本身应该始终接受`:aliases`执行参数,并使用它来计算项目的基础)。
0

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

...