Leo*_*hin 5 plugins runtime clojure
考虑到我正在开发一个最终用户软件程序(作为一个uberjar),我想知道我的选择是什么让用户可以下载插件并在运行时加载它.
插件应该编译而没有源代码,所以...... 喜欢load不是一种选择.有什么现有的库(或Java的方法......?)来构建它?
编辑:如果你不确定我也会对主程序的重启/启动成本感到满意.但是,重要的是源代码不会包含在任何JAR文件中(主应用程序和插件jar文件都没有,请参阅:Leiningen文档的omit-source).
要在运行时添加jar,请使用石榴,它可以将.jar文件添加到类路径。您的软件插件应为常规的Clojure库,它们遵循您需要建立的某些约定:
使它们为edn实现构造函数/析构函数机制(例如LifecycleStuart Sierras 组件库中的协议)的对象提供(例如)符号。在运行时require以及resolve该符号中,start将生成的对象并将其移交给其余程序插件协调机构。
在您的程序中提供一个公共API,该API允许插件通过您异步协调的方式与之交互clojure.core.async(例如,不要让一个插件阻塞整个程序)。
确保插件具有协调的方式,以便仅在需要时才彼此公开其功能,从而在插件之间实现高度的模块化。确保您的插件加载程序能够检测插件之间的依赖关系,并能够以正确的顺序加载和卸载它们。
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |