加载类路径中不存在的类

时间:2010-07-28 00:21:33

标签: java groovy classpath classloader groovyclassloader

假设我使用Groovyc编译了一个Groovy脚本,Groovyc在文件系统中生成了一个或多个.class文件。从Java应用程序中,如何动态地将这些类添加到类路径中以加载它们并调用它们的方法?目标是预编译Groovy脚本并将它们存储到数据库中,因此可以从脚本的编译版本执行评估。

2 个答案:

答案 0 :(得分:9)

您可以创建URLClassLoader的实例以从目录中加载新类:

URL dirUrl = new URL("file:/" + "path_to_dir" + "/");             // 1
URLClassLoader cl = new URLClassLoader(new URL[] {dirUrl},
                             getClass().class.getClassLoader());  // 2
Class loadedClass = cl.loadClass("com.xyz.MyClass");
MyClass obj = (MyClass) loadedClass.newInstance();
obj.doSomething();

第1行创建{。{1}}到.class文件所在的目录。

第2行创建一个新的URL实例。第一个参数是要用作源的URL数组。您可以在阵列中指定多个目录URL。第二个参数是将成为这个新类加载器的父类的类加载器。我们将执行上述代码的类的类加载器作为此参数传递。

子类加载器加载的类可以访问父类加载器加载的类。

答案 1 :(得分:0)

您需要编写自己的类加载器。

这个javadoc link有一个如何定义自定义的示例。