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

欢迎!有关如何操作的更多信息,请参阅关于页面。

+1投票
tools.deps
编辑

在deps.edn中,能够编写:exclusions [io.netty/*]将非常方便。

例如,这是我从项目clojure -Stree中的摘录。您如何建议使此项目保持io.netty库的一致版本,而不需要编写长、容易出错的范围排除列表?

com.datomic/datomic-pro 0.9.5981
  io.netty/netty-all 4.1.32.Final

com.turo/pushy 0.13.10
  io.netty/netty-handler-proxy 4.1.37.Final
    io.netty/netty-codec-socks 4.1.37.Final
  io.netty/netty-resolver-dns 4.1.37.Final
    io.netty/netty-codec-dns 4.1.37.Final

software.amazon.awssdk/s3 2.10.5
  software.amazon.awssdk/netty-nio-client 2.10.5
    io.netty/netty-common 4.1.42.Final
    io.netty/netty-codec-http2 4.1.42.Final
    io.netty/netty-codec 4.1.42.Final
    io.netty/netty-buffer 4.1.42.Final
    io.netty/netty-handler 4.1.42.Final
    io.netty/netty-transport-native-epoll$linux-x86_64 4.1.42.Final
      io.netty/netty-transport-native-unix-common 4.1.42.Final
    io.netty/netty-transport 4.1.42.Final
      io.netty/netty-resolver 4.1.42.Final
    io.netty/netty-codec-http 4.1.42.Final

我希望这种情况很少见,但我认为大型库同时有“所有”依赖项和单独组件工件的情况相当常见。以下是一些例子,仅供参考:netty,jetty,ring,ai.h2o,和com.amazonaws。

Jira在https://clojure.atlassian.net/browse/TDEPS-141已记录

1 答案

+1投票

似乎有考虑的必要。jira已记录于https://clojure.atlassian.net/browse/TDEPS-141

我认为最大的缺点是,deps.edn随后需要额外步骤进行解释,并且在那个groupId中创建新工件时,通配符可能会随着时间的推移改变其含义。

by
我将提供一个数据点:我们已经停止使用 deps.edn 中的 :exclusions,因为我们曾经用它来控制如何解析版本(Leiningen/Boot 时代的遗留问题,我们当时复制了依赖关系)。相反,我们为这些库的 "all" 变量的顶级依赖声明提供,这样就可以覆盖所有的传递依赖项(这是我们使用 :exclusions 在 lein/boot 中的主要用途)。
...