2024 年 Clojure 调查问卷中分享您的想法!

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

+29投票
tools.deps

添加依赖项时,我希望能够指定使用 deps.edn 的库的坐标别名,例如

{:deps {org.clojure/clojure {:mvn/version "1.10.0"}
        org.openjfx/javafx-base {:mvn/version "12-ea+10"}}
 :aliases {:web {:extra-deps {org.openjfx/javafx-web {:mvn/version "12-ea+10"}}
                 :extra-paths ["src/web"]}
           :controls {:extra-deps {org.openjfx/javafx-controls {:mvn/version "12-ea+10"}}
                      :extra-paths ["src/controls"]}}
 :paths ["src/base"]}

use

{:deps {git/lib {:git/url "..." 
                 :sha "..."
                 :aliases ["controls"]}}}

这样就可以创建更精细的库,这些库可能有可选的代码/依赖项,不会在不需要时增加类路径的大小。

刚刚发现了这个,并在 Slack 上联系了 Alex。相关工单(https://clojure.atlassian.net/browse/TDEPS-116)已经多年没有活动,甚至没有版本作为“待办事项”。如果在那里看到一些活动就太好了,否则看起来像是一件被遗忘或被忽视的东西。

6 个答案

+2投票

Metabase有这个专案具体的使用案例,这是使我们难以过渡到deps.edn的众多原因之一。以下是我们面临的问题的简化版本

在 Metabase 中,我们提供了两个版本:一个是开源版本(位于 AGPL 下),另一个是企业版本(位于商业许可证下)。我们不能在开源版本中提供 Oracle JDBC 驱动程序,因为 JDBC 驱动程序的许可条款使其与 AGPL 不兼容。但是我们可以将其与 EE 版本一起提供。

Oracle驱动本身是Metabase-core更大的仓库中的一个子项目。
我们希望有一个顶级的:ee别名,它能合并它从:local/root部分拉取的:ee别名。示例

;; ./deps.edn
{:deps
 {:local/root "oracle-driver"}
 :aliases 
 {:ee
  {:extra-deps {:local/root "oracle-driver", :alias :ee}}}}

;; oracle-driver/deps.edn
{:aliases
 {:ee
  {:extra-deps
   {com.oracle.ojdbc/ojdbc8 {:mvn/version "19.3.0.0"}}}}}
by
+1 这个功能能够解决我遇到的问题
+1
by

评论者:borkdude

有趣的是,我认为这也实现了某些人一直要求的功能,即管理依赖项。

libs/deps.edn可能是一个空项目,它仅通过别名描述组依赖项(管理依赖项)。
app/deps.edn可以像上述示例一样消费这些组。

细节:也许:aliases应该包含关键词而不是字符串?

+1
by

我认为这可以解决的一个更多用例

我们有一个包括各种库的子目录的monorepo结构,每个目录都有自己的deps.edn

  1. /deps.edn - 定义:deps {is.mad/server-web3 {:local/root "./server/web3"}}
  2. /server/web3/deps.edn - 定义:test别名带有{:extra-paths ["test"]}
  3. /server/web3/src/<更多文件>
  4. /server/web3/test/<更多文件> - 我希望这些文件被包含在构建和运行中

目前,子项目(单个库)中的别名定义尚未考虑。如果考虑了,我们可以为每个拥有带有测试文件夹的:extra-paths的项目定义:test别名。(尽管项目内测试文件夹的相对路径必须从定义它的deps.edn开始解析)。

这样就可以从顶层运行一个或多个子项目的测试了。
例如,clj -A:shadow:test watch test-node

目前有两种方法可以实现它,但它们会引入冗余或其他不希望的副作用
1. 在顶层deps.edn中为每个子项目定义别名,以便每个别名都有额外的依赖项和路径
2. 让每个子项目在其deps.edn中将测试文件夹包含在路径中
副作用是测试可以有不应该包含在构建中的依赖项

相关的Clojurians Slack线程 https://clojurians.slack.com/archives/C03S1KBA2/p1662484004746779

...