【问题标题】:Dynamically load dependencies in Clojure REPL在 Clojure REPL 中动态加载依赖项
【发布时间】:2011-10-10 10:21:55
【问题描述】:

是否可以在 running Clojure REPL 中下载和安装以前未指定的 Maven 依赖项?

我正在考虑一种相当常见的情况,即您希望为某些测试或可视化工具临时快速引入依赖项,但又不想关闭当前的 REPL 会话。

例如,如果您想在当前的 REPL 会话中引入 Incanter 以绘制一些漂亮的数据图表,您可能会使用以下内容:

(load-dependency "incanter" "incanter" "1.3.0-SNAPSHOT")

;; now do stuff with Incanter......

大概您将不得不从适当的存储库触发 Maven 或 Leiningen 中的依赖关系解析/加载,但我对它们的内部结构了解不足,无法知道在运行时这是否可能.....

【问题讨论】:

标签: maven clojure read-eval-print-loop leiningen


【解决方案1】:

Java 的默认类加载器行为使这变得困难,但 pomegrenade (actually, pomegranate) 声称能够做你想做的事。

【讨论】:

  • 太棒了 - 这看起来完全符合要求!有趣的是,Incanter 示例与 pomegrenade 文档中使用的示例相同 :-)
  • @mikera 你真的很幸运,这个库是在大约 5 天前发布的 disclojure.org/2011/10/05/today-in-the-intertweets-oct-5th-ed-3
  • 我注意到 URL 拼写正确(石榴),但链接是一个相当滑稽的石榴。我想知道,这是我听不懂的某种奇怪的手榴弹笑话吗?
  • 哈哈。我想那是我的拼写错误。我犯了一个愚蠢的错误。虽然 granate 和 grenade 是同一个词;只是第一个是法语,第二个是英语(石榴音译为手榴弹苹果)。为了纠正我的错误,我在原帖中放了注释
  • 这里有个小插件,如果你想使用完全基于 clojure 的依赖系统,github.com/bmillare/dj 支持运行时加载依赖。此外,还支持动态加载原生依赖项。
【解决方案2】:

Alembic 是一个 leiningen 插件,可将此功能添加到 repl。

自述文件中的直接引用:

Alembic 是一个 clojure 库,可让您在运行的 JVM 实例中将 jar 提取到类路径中。您可以使用它以临时方式或通过重新加载 project.clj 文件来将依赖项添加到正在运行的 REPL。

它还添加了一个 (load-project) 函数来解析 project.clj 并动态添加缺失的依赖项。

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多