Groovy脚本运行程序体系结构

Groovy脚本运行程序体系结构,groovy,classloader,runnable,Groovy,Classloader,Runnable,初始信息:我有一个groovy应用程序(我们称之为Runner),它能够运行任何实现特定接口的东西(我们称之为Runnable)。我有一个可运行文件池(groovy脚本),它应该在初始化阶段对该应用程序可见,并且该应用程序将调用它(通过接口并将对象作为参数传递) 任务:我需要的是从Runner加载并调用所有Runnable的方法 要求:这很棘手,因为脚本可能不遵循特定的包结构,可以与Runner放在同一台机器上,但实际上可以放在任何地方。它们也可以用不同的名称命名(公开讨论强制的java相似命名

初始信息:我有一个groovy应用程序(我们称之为Runner),它能够运行任何实现特定接口的东西(我们称之为Runnable)。我有一个可运行文件池(groovy脚本),它应该在初始化阶段对该应用程序可见,并且该应用程序将调用它(通过接口并将对象作为参数传递)

任务:我需要的是从Runner加载并调用所有Runnable的方法

要求:这很棘手,因为脚本可能不遵循特定的包结构,可以与Runner放在同一台机器上,但实际上可以放在任何地方。它们也可以用不同的名称命名(公开讨论强制的java相似命名:类名==文件名),现在可以跳过(不过如果有建议的话,这很酷!)

注意:我设想有一个配置文件可以配置脚本(提供了绝对路径),并使用将对象强制转换到可运行接口并触发所需内容或调用方法(…)来加载脚本。但我不知道是否可以更容易地完成(应该有办法,因为它看起来太笨拙了)。我也想不出一种方法来处理文件命名问题和一个文件问题中的多个类


注:这么长的描述可能会引起误解,所以请对模糊的部分进行评论。

我认为您需要了解实现接口的所有类。您可能会感兴趣。

在配置文件中写入脚本的绝对路径是一个很好的选择,并被证明是一个有效的解决方案。您必须处理应用程序类装入器中不可见的内容的类装入。特别是,您必须处理基于注释的POJO序列化问题。单例可运行加载程序是一个很好的实践