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

这样就可以创建更细致的库,这些库可能有可选的代码/依赖,而在不需要时不会膨胀类路径。

首次遇到这个并("+

6 答案

+2

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

在Metabase中,我们提供了两个版本:一个开源版本(遵循AGPL协议)和一个企业版(遵循商业许可证)。由于JDBC驱动的许可条款与AGPL协议不兼容,我们无法在开源版本中提供Oracle JDBC驱动。但是,我们可以在企业版中提供它。

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

;; ./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/<更多文件> - 这些文件我希望能包含在构建和运行中

目前子项目(单个库)中的别名定义没有被考虑。如果它们被考虑进去了,我们就可以为每个有带有测试文件夹的:extra-paths的项目定义:test别名。(虽然测试文件夹在项目中的相对路径必须从定义它的deps.edn开始解决)。

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

目前有2种方法可以达到这个目的,但都会引入重复或其他不希望出现的副作用
1. 在每个子项目的顶级deps.edn中定义别名,以便每个别名都有额外依赖(extra-deps)和额外路径(extra-paths)
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,并仅为此项目使用修补后的版本本地化。

...