Plugins 运行时加载插件的体系结构
考虑到我正在开发一个终端用户软件程序(作为uberjar),我想知道我的选择是什么,让用户能够下载插件并在运行时加载它 插件应该是编译好的,并且没有源代码,所以像Plugins 运行时加载插件的体系结构,plugins,clojure,runtime,Plugins,Clojure,Runtime,考虑到我正在开发一个终端用户软件程序(作为uberjar),我想知道我的选择是什么,让用户能够下载插件并在运行时加载它 插件应该是编译好的,并且没有源代码,所以像load这样的东西不是一个选项。 现有的哪些库(或Java的方式…?)可以用来构建它 编辑:如果您不确定我是否会对重新启动主程序的方式感到满意。然而,重要的是源代码不会包含在任何JAR文件中(无论是主应用程序还是插件JAR,请参阅:省略Leiningen文档的源代码) 我自己也没有试过,但理论上你应该可以和Clojure一起工作 这里有
load
这样的东西不是一个选项。
现有的哪些库(或Java的方式…?)可以用来构建它
编辑:如果您不确定我是否会对重新启动主程序的方式感到满意。然而,重要的是源代码不会包含在任何JAR文件中(无论是主应用程序还是插件JAR,请参阅:省略Leiningen文档的源代码) 我自己也没有试过,但理论上你应该可以和Clojure一起工作 这里有一个Clojure/OSGi集成库:
同样,这只是一个可能解决方案的开始。我还没有尝试过这样做。要在运行时添加jar,请使用它将.jar文件添加到类路径。您的软件插件应该是常规的Clojure LIB,遵循您需要建立的某些约定:
edn
中)向实现构造函数/析构函数机制的对象提供符号,如Stuart Sierras库中的生命周期
协议。在运行时,要求
和解析
该符号,启动
生成的对象,并将其交给其他程序clojure.core.async
(不要让一个插件阻塞整个程序)您确定tools.namespace.find在源代码未包含在JAR中时是否有效吗?我没有尝试过,但自述文件中指出tools.namespace.find包含“用于在文件系统、目录或JAR文件中搜索Clojure命名空间的实用程序。与java.classpath结合使用,它可以在java类路径上搜索命名空间。”不幸的是,如果没有源代码,它在JAR文件中找不到任何名称空间:(似乎OSGi是Java的实现方式。github repo的文档记录非常糟糕,从源代码看似乎非常粗糙。如果没有可比性,我可能会自己为OSGi编写一个包装器。