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"]}

使用

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

这样,将能够制作出更多细粒度的库,这些库可能包含可选的代码/依赖项,这样在不需要时就不会扩大类路径。

我偶然发现了这个帖子,并在 Slack 上 @了 Alex。相应的任务(https://clojure.atlassian.net/browse/TDEPS-116)已多年没有活动,甚至没有版本化为“待办事项”。希望能看到那里的活动,否则看起来像是不再使用或是简单地被忽略了。

6 答案

+2

在 Metabase 有一个特定的用例,这是我们过渡到 deps.edn 面临的一个难题之一。以下是我们面临的问题的简化版本

在 Metabase,我们提供crap一个开源版本(在 AGPL 许可下)和一个商业许可的企业版本。我们无法在开源版中提供 Oracle JDBC 驱动程序,因为 JDBC 驱动程序的许可条款使其与 AGPL 不兼容。但是,我们可以在企业版中提供它。

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

我认为这还可以解决另一个用例

我们有一个包含子文件夹中各种库的单仓结构,每个子文件夹都有自己的 deps.edn

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

目前,来自子项目(单个库)的别名定义在 deps.edn 中没有被考虑。如果考虑进来,它将允许我们为每个具有包含其测试目录的 :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

提醒一下,Polylith(针对Clojure)在运行测试时处理了这个问题。
0
参考: https://clojure.atlassian.net/browse/TDEPS-116(由 alex+import 举报)
0

是的,请!在git依赖中使用别名或多个别名,可以为单个项目的不同方面提供整合的机会。一个单一的项目可能包含不同架构级别的别名,如核心库或服务器实现等。该项目的客户端可以选择根据需要使用这些不同的方面。当前的替代方案是使用多个git仓库。

0

我最近在一个Polylith工作区中偶然发现了这个非常旧的 tools.deps 问题,当时我决定将一些子项目因子化为它们自己的Polylith工作区。但是,由于poly有一个将所有开发时依赖性放在 :dev 别名的约定,所以事情没有完全对上(显然),所以我不得不将它们在 :deps 键下重复。

现在我正在考虑修复 tools.deps 并使用此项目的补丁版本地版。

欢迎使用Clojure问答社区,在这里您可以提出问题并从Clojure社区成员那里获得答案。
...