Module 如何在运行时分发和交换业务逻辑?

Module 如何在运行时分发和交换业务逻辑?,module,clojure,jvm,java-platform-module-system,Module,Clojure,Jvm,Java Platform Module System,我有在.NET中通过加载程序集交换业务逻辑的经验,并使用反射找到实现的接口。通过简单地将DLL文件分发并放置到其工作目录中,可以在运行时启用行为组合。我如何在Clojure实现同样的目标 我被告知我可以编译我的Lein项目而不需要AoT编译,依赖于JVM将从兄弟JAR文件中搜索的类?我还看到Java9有一个名为“Jigsaw”的解决方案,还有其他项目,例如。我不确定这些是否合适 我真的很感激一篇文章/教程、工作示例或一些关于如何实现这一点的提示,因为我也是JVM新手 特别是我的项目将涉及一个业务

我有在.NET中通过加载程序集交换业务逻辑的经验,并使用反射找到实现的接口。通过简单地将DLL文件分发并放置到其工作目录中,可以在运行时启用行为组合。我如何在Clojure实现同样的目标

我被告知我可以编译我的Lein项目而不需要AoT编译,依赖于JVM将从兄弟JAR文件中搜索的类?我还看到Java9有一个名为“Jigsaw”的解决方案,还有其他项目,例如。我不确定这些是否合适

我真的很感激一篇文章/教程、工作示例或一些关于如何实现这一点的提示,因为我也是JVM新手

特别是我的项目将涉及一个业务逻辑模型“模块”,在启动时加载,消费消息并生成消息作为回报。它有点像一个黑盒子。
我想避免的另一种途径是MQTT风格的方法,其中分布式模块是相对较重的独立程序


感谢您的时间。

在纯Java中,您可以使用与在C#中相同的方法:开发核心并提供可用于扩展的接口,然后检查(使用反射)Jar文件中接口实现的Java类路径(这与DLL的想法相同),但是Java类路径要么是一个环境变量,要么是一个命令行参数,其中包含搜索Jar文件的路径列表

在Clojure中,您可以将库作为编译代码或Clojure运行时将加载的源代码分发。我建议您研究一下,因为它将为您提供很好的指导,指导您如何:

  • 通过各种方式在配置文件上添加依赖项,包括从私有repo加载依赖项,甚至在git repo中以精确的提交方式加载依赖项
  • 使用可能需要的各种开关或配置启动代码,以便可以通过编辑配置文件来更改行为