Groovy根加载器问题
我们有一个无法在命令行上使用class path(-cp)参数的项目。我们决定使用rootLoader在运行时加载必要的类。然而,我们在运行时使用rootLoader加载类时遇到了一个问题。下面是两个简单的例子。第一个有效,但第二个无效。当然,第二个例子是我需要研究的。这两个示例都使用cmd文件运行 工作示例Groovy根加载器问题,groovy,classpath,Groovy,Classpath,我们有一个无法在命令行上使用class path(-cp)参数的项目。我们决定使用rootLoader在运行时加载必要的类。然而,我们在运行时使用rootLoader加载类时遇到了一个问题。下面是两个简单的例子。第一个有效,但第二个无效。当然,第二个例子是我需要研究的。这两个示例都使用cmd文件运行 工作示例 println this.class.name println new File("W:/JavaApps/lib/TWS_Test.jar").exists() this.class.c
println this.class.name
println new File("W:/JavaApps/lib/TWS_Test.jar").exists()
this.class.classLoader.rootLoader.addURL(new URL("file:///W:/JavaApps/lib/TWS_Test.jar"))
def simpleJar = Class.forName("Simple_Jar").newInstance();
simpleJar.printGreeting()
println simpleJar.returnGreeting()
println "Hello, TWS!"
这是上面的输出。
HelloTWS_LC
true
Java-printGreeting
Java-returnGreeting
Hello, TWS!
"finish HelloTWS.groovy for High Volume Letters - rc 0"
java.lang.Class
true
"finish HelloTWS.groovy for High Volume Letters - rc 1"
W:\JavaApps\DMCGroovyScripts>groovy W:\JavaApps\DMCGroovyScripts\HelloTWS_LC.groovy 1>W:\JavaApps\DMCGroovyScripts\HelloTWS.txt
Caught: java.lang.NullPointerException: Cannot get property 'rootLoader' on null object java.lang.NullPointerException: Cannot get property 'rootLoader' on null object
at HelloTWS_LC.main(HelloTWS_LC.groovy:5)
在这个显式定义类和main方法的示例中,rootLoader返回null
class HelloTWS_LC {
static void main(def args) {
println this.class.name
println new File("W:/JavaApps/lib/TWS_Test.jar").exists()
this.class.classLoader.rootLoader.addURL(new URL("file:///W:/JavaApps/lib/TWS_Test.jar"))
def simpleJar = Class.forName("Simple_Jar").newInstance();
simpleJar.printGreeting()
println simpleJar.returnGreeting()
println "Hello, TWS!"
}
}
非工作示例的输出。
HelloTWS_LC
true
Java-printGreeting
Java-returnGreeting
Hello, TWS!
"finish HelloTWS.groovy for High Volume Letters - rc 0"
java.lang.Class
true
"finish HelloTWS.groovy for High Volume Letters - rc 1"
W:\JavaApps\DMCGroovyScripts>groovy W:\JavaApps\DMCGroovyScripts\HelloTWS_LC.groovy 1>W:\JavaApps\DMCGroovyScripts\HelloTWS.txt
Caught: java.lang.NullPointerException: Cannot get property 'rootLoader' on null object java.lang.NullPointerException: Cannot get property 'rootLoader' on null object
at HelloTWS_LC.main(HelloTWS_LC.groovy:5)
命令窗口中有错误。
HelloTWS_LC
true
Java-printGreeting
Java-returnGreeting
Hello, TWS!
"finish HelloTWS.groovy for High Volume Letters - rc 0"
java.lang.Class
true
"finish HelloTWS.groovy for High Volume Letters - rc 1"
W:\JavaApps\DMCGroovyScripts>groovy W:\JavaApps\DMCGroovyScripts\HelloTWS_LC.groovy 1>W:\JavaApps\DMCGroovyScripts\HelloTWS.txt
Caught: java.lang.NullPointerException: Cannot get property 'rootLoader' on null object java.lang.NullPointerException: Cannot get property 'rootLoader' on null object
at HelloTWS_LC.main(HelloTWS_LC.groovy:5)
不是
rootLoader
为null,而是getClassLoader
方法返回null
下面的代码用于查找(打印rootLoader
):
此示例不起作用(NPE):
也许这个问题也会有用。为什么不能使用classpath参数?@Voy3966我的答案有用吗?问题解决了吗?@Voy3966,这就是你想要的吗?作为补充说明:第二个例子是使用静态方法
在静态方法中,此
引用类。因此,this.getClass()始终是java.lang.Class,它在大多数情况下作为加载程序为null,因为它是加载该类的系统加载程序。