我開發一個圖書館和它的方法有以下形式:有根裝載器裝載的jar
void setVars(def script) {
// script parameter is an instance of groovy.lang.Script loaded by Rootoader
// MyBinding is part of the lib and extends groovy.lang.Binding
script.setBinding(new MyBinding())
}
現在,如果庫作爲一個jar文件中我得到了一個未定義的方法例外,因爲腳本對象從主應用程序傳遞,由RootLoader加載,而MyBinding由sun.misc.Launcher$AppClassLoader
加載,這是它的子級。有什麼方法可以使用RootClass Loader加載整個jar嗎?由於某些原因,rootLoader.loadClass("MyBinding")
返回由AppClassLoader加載的類,並且不會重新加載它。
UPDATE用一個例子:
S.script(由用戶創建的):
println 1
Main.groovy(由用戶創建的):
class Main {
static void main(String[] args) {
Lib.setVars(S)
}
}
我的庫。用戶添加到類路徑中的jar:
class MyBinding extends Binding {
//...
}
class Lib {
static void setVars(Class scriptClass) {
def script = scriptClass.newInstance()
//Exception as MyBinding is loaded by MyBinding
//while script class is loaded by RootLoaded
script.setBinding(new MyBinding())
}
}
Main.groovy是運行的文件。我從eclipse中將lib.jar添加到Java Build Path - > Libraries部分的項目類路徑中(我期望用戶以這種方式或通過maven使用這個庫)。
我沒有在從其中使用了罐的主要應用控制,我可以重新加載罐(或至少一組的類)事後?請再次顯示 – Nutel
如何運行程序/腳本。 – Arham
我用一個例子更新了我的問題 – Nutel