我有一個庫,允許客戶提供的文本文件,其中每個都包含常規代碼擴展Java類Z.例如文件「A.groovy」一類的列表包含GroovyClassLoader - 添加解析的類類路徑
package com.mypkg;
public class A extends Z {
@Override
public void someMethod() {
// do something A-ish
}
}
等
庫編譯每個這些和(在這種情況下),會返回到客戶端類型Z.的實例
當客戶需要像我的問題來這個:
package com.mypkg;
public class B extends A { // extends A!
@Override
public void someMethod() {
// do something B-ish instead of A-ish
}
}
其中B延伸A和A類是B類前解析
的問題是,GroovyClassLoader似乎無法找到A級,即使它只是解析A.這裏的代碼,編譯腳本和創建實例:
for (String fileName : listOfScriptFiles) {
InputStream in = getInputStreamFromFile(fileName);
CompilerConfiguration compConfig = new CompilerConfiguration();
GroovyClassLoader classLoader = new GroovyClassLoader(Thread.currentThread()
.getContextClassLoader(), compConfig);
Z service = null;
Class clazz = classLoader.parseClass(in);
service = (Z) clazz.newInstance();
return service;
}
是否有「註冊」 A級與運行,這樣當Groovy中嘗試編譯B類也不會抱怨A級不存在呢?
UPDATE
我實際上是能夠通過實例化GroovyClassLoader外循環來解決這個通過客戶端的代碼列表,以便解析的類加載器遍歷是一個分析B.
相同現在的問題仍然有效,不過,因爲我可以在一個完全不同的部分,在相同的類加載器是無法想象其中的某人的代碼的一部分,他們解析的情況下,然後,他們分析B.
你能添加更多的細節你的問題?例如,你不顯示你如何定義變量「in」。 – djangofan
'in'只是列表中的源代碼。澄清了一些背景。 –
您可以添加啓動Groovy腳本的命令嗎? – djangofan