我想有热代码项目更新之间的交换,但我还没有找到如何动态地加载.class文件的任何信息.更具体地说,我想要这样的东西:
lein uberjar,获得some-client-0.0.0-standalone.jar.java -jar some-client-0.0.0-standalone.jar.some-client-0.0.1-standalone.jar将其复制到some-client-0.0.0-standalone.jar目录.some-client-0.0.0-standalone.jar现在可以删除.插件框架方法
您已声明要进行热代码交换,但实际需要的是松散耦合的模块以及在运行时进行解析的能力.坦率地说,任何插件框架都可能有所帮助,包括成熟的OSGi(将在下面介绍).

由于您正在进行某种PoC,我建议您查看以下示例:
可以提出定义simlle升级方案:
通过这种方式,元应用程序将能够在不重新启动的情况下提供新的或更新的功能.所以你可以:
您还可以查看并采用Waterfront(基于Clojure的Clojure编辑器)结果(可能需要加强生命周期管理等)
在实施方面,Waterfront基于上下文模式.它允许事件处理程序以功能(无副作用)方式进行通信.除此之外,还有一个插件加载器机制,用于加载Waterfront配置文件中指定的插件.这意味着可以轻松添加或删除功能(在调试时非常有用!).
OSGI方法
正如所建议的那样,OSGi似乎是解决问题的好方法.还请注意OSGi很好,很成熟并提供了很多开箱即用的东西,但它也有些复杂:

顺便说一下,OSGi是clojure社区的长期目标.你可以查看Clojure Todo:
> better modularization for OSGi etc
> * names
> * no single namespace pool
> * namespaces found via classes, thus tracks classloader and modules
> * deal with import proxying a la Class.forName stack walk?
Run Code Online (Sandbox Code Playgroud)
有一些解决方案已经可用:
第二个项目使用clojure和OSGi提供Producer-Consumer示例:
快乐的编码.