我GroovyScriptEngine
在我的 Java 应用程序中使用从不同来源动态加载代码。假设我有两个文件夹sources_A\
和sources_B\
.
GroovyScriptEngine engine = new GroovyScriptEngine(new String[]{
"sources_A", "sources_B"
});
在每个文件夹中,我都有希望在运行时任意实例化的 Groovy 包和类。
问题:其中一些类在两个文件夹中具有相同的(完整)名称。
所以当我运行时有一个歧义:
engine.loadScriptByName("some.package.SomeClass").newInstance()
当然,我可以创建两个不同的引擎:
GroovyScriptEngine engine_A = new GroovyScriptEngine(new String[]{"sources_A"});
GroovyScriptEngine engine_B = new GroovyScriptEngine(new String[]{"sources_B"});
但是当从这两个不同的引擎实例化的两个对象必须相互交互时,我遇到了问题:
object_from_A.someMethod(object_from_B);
错误:文件 bar.groovy 中方法 foo 中第 ** 行的参数类型不匹配
(不用说没有类型不匹配:对象具有正确的类型但由于引擎不同而无法识别)
简而言之,您是否有解决方案:
- 具有某种方式来消除使用哪个源文件夹的歧义的单引擎解决方案?
- 双引擎解决方案以某种方式让来自两个不同引擎的对象一起工作?