在 Clojure REPL 中动态加载依赖项

发布于 2024-12-08 21:37:48 字数 415 浏览 0 评论 0原文

是否可以在运行 Clojure REPL 中下载并安装之前未指定的 Maven 依赖项?

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

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

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

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

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

Is it possible to download and install previously unspecified Maven dependencies in a running Clojure REPL?

I'm thinking of the fairly common case where you want to quickly pull in a dependency temporarily for some testing or visualisation tools, but don't want to close down your current REPL session.

For example if you wanted to pull in Incanter to draw some pretty charts of data in your current REPL session, you might use something like the following:

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

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

Presumably you would have to trigger the dependency resoltion / loading in Maven or Leiningen from an appropriate repository but I don't know enough about their internals to know whether this is possible or not at runtime.....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦冥 2024-12-15 21:37:48

Java 的默认类加载器行为使这变得很困难,但是 pomegrenade(实际上是石榴) 声称能够做你想做的事情想。

Java's default classloader behavior makes this difficult, but pomegrenade (actually, pomegranate) claims to be able to do what you want.

幸福不弃 2024-12-15 21:37:48

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

直接引用自述文件:

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

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

Alembic is a leiningen plugin that adds this functionality to the repl.

Direct quote from the README:

Alembic is a clojure library that allows you to distill jars onto your classpath in a running JVM instance. You can use it to add dependencies to a running REPL, either in an ad-hoc fashion, or by reloading your project.clj file.

It also adds a (load-project) function that parses the project.clj and adds missing dependencies on the fly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文