我正在尝试使用Clojure实现某些供应商提供的软件的“插件”。以下是有关供应商提供的软件的一些背景信息。它希望我实现特定接口,然后将包含该实现的jar文件放入其服务器上的目录中。然后,当客户端运行软件时,我的实现类会通过RMI从服务器向客户端“发送”,然后接口的实现在客户端上运行。客户端没有我的jar文件(或Clojure jar文件)在其类路径中。只有服务器拥有这些jar文件。RMI似乎足够聪明,可以上传必要的任何依赖项。
我已经成功地在Clojure中构建了一个非常简单的实现,它似乎是有效的。问题是,我希望能够随时更新客户端上的实现。我在我的类中嵌入了repl-server,并且我可以成功连接到它。为了明确起见,repl-server正在客户端上运行,我能够连接到repl并获得提示“clojure.core =>”。但是,repl似乎相当受限制。如果我输入(+ 1 1),我会收到以下错误:“java.lang.ClassNotFoundException:clojure.lang.Numbers”。如果输入(str“kent”),我会得到“java.lang.NoClassDefFoundError:clojure/lang/AFunction”。我输入的大多数内容都会产生类似的结果。但是,我可以做一个简单的def,例如(def x 3),并且x确实被定义了,因此REPL似乎在某种意义上正在运行。
这似乎可能是类路径问题,但我不确定为什么在客户端上运行的“已编译”代码不会有类路径问题,而在同一客户端上运行的repl无法找到核心类。
有任何想法吗?
谢谢。 肯特。
我已经成功地在Clojure中构建了一个非常简单的实现,它似乎是有效的。问题是,我希望能够随时更新客户端上的实现。我在我的类中嵌入了repl-server,并且我可以成功连接到它。为了明确起见,repl-server正在客户端上运行,我能够连接到repl并获得提示“clojure.core =>”。但是,repl似乎相当受限制。如果我输入(+ 1 1),我会收到以下错误:“java.lang.ClassNotFoundException:clojure.lang.Numbers”。如果输入(str“kent”),我会得到“java.lang.NoClassDefFoundError:clojure/lang/AFunction”。我输入的大多数内容都会产生类似的结果。但是,我可以做一个简单的def,例如(def x 3),并且x确实被定义了,因此REPL似乎在某种意义上正在运行。
这似乎可能是类路径问题,但我不确定为什么在客户端上运行的“已编译”代码不会有类路径问题,而在同一客户端上运行的repl无法找到核心类。
有任何想法吗?
谢谢。 肯特。