gpt4 book ai didi

plugins - 在运行时加载插件的架构

转载 作者:行者123 更新时间:2023-12-02 16:59:53 25 4
gpt4 key购买 nike

考虑到我正在开发一个最终用户软件程序(作为 uberjar),我想知道我的选择是什么,可以让用户下载插件并在运行时加载该插件。

插件应该经过编译并且没有源代码,所以……就像 load 不是一个选项。有哪些现有的库(或 Java 的方法...?)可以用来构建它?

编辑:如果您不确定,我也会对需要重新启动/启动主程序的方式感到满意。然而,重要的是源代码不会包含在任何 JAR 文件中(无论是主应用程序还是插件 jar,请参阅 Leiningen 文档的 :omit-source )。

最佳答案

要在运行时添加 jar,请使用 pomegranate,它允许您将 .jar 文件添加到类路径。软件的插件应该是常规的 Clojure 库,遵循您需要建立的某些约定:

  1. 让它们为实现构造函数/析构函数机制的对象提供(例如在 edn 中)符号,例如 Stuart Sierras component 库中的 Lifecycle 协议(protocol)。在运行时,requireresolve 该符号,start 生成的对象并将其交给您的程序插件协调工具。

  2. 在您的程序中提供一个公共(public) API,允许插件以您异步协调的方式与其进行交互。 G。使用 clojure.core.async (不要让一个插件阻塞整个程序)。

  3. 确保插件有一种协调的方式,只有在他们愿意的情况下才能相互公开其功能,以便在插件之间实现高度的模块化。确保您的插件加载器能够检测插件之间的依赖关系,并能够以正确的顺序加载和卸载它们。

关于plugins - 在运行时加载插件的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com