[Groovy] 关于Groovy中class.classLoader的问题

magixyu 2009-11-13
想用Groovy做一个动态的加载jar文件的脚本,碰到了下面的问题,请大家帮忙看看。

Test.groovy
loader = this.class.classLoader.rootLoader
if (loader == null) {
    println("Loader is empty")
    return
}
fileUrl = new URL("jar:file:///home/netadmin/groovy-test/base64.jar!/")
loader.addURL(fileUrl)
def encoder = Class.forName('base64.Base64En')
println encoder.base64Encode("xxx:xxx")


如上的groovy代码用groovy Test.groovy运行正常,能显示"xxx:xxx"的base64编码,也就是说loader 不是空。
但是如果用groovyc编译后,运行:
java -cp /opt/groovy/embeddable/groovy-all-1.6.5.jar:.  Test

则显示"Loader is empty"

这是为什么呢?

我把上面第一行换成
loader=this.class.classLoader

用groovyc编译后,运行没有问题。但是直接在groovy环境下,会有class not found的异常。

请帮忙解释一下this.class.classLoader和this.class.classLoader.rootLoader的关系和区别,谢谢了
Global site tag (gtag.js) - Google Analytics