java - 加载类路径中不存在的类

标签 java groovy classpath classloader groovyclassloader

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

最佳答案

您可以创建 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 行创建指向 .class 文件所在目录的 URL

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

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

关于java - 加载类路径中不存在的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349015/

相关文章:

java - java中的序列化serialversionuid

java - 在非 Maven 项目中,如何在运行时查看 java 类路径中的类?

java - java中无法加载多个类文件

java - 为什么我们不能使用新关键字创建 Activity ?

java - 在Spring中生成一致的资源链接

java - Android : java. lang.OutOfMemoryError:

java - 深入了解 Java 图形

java - Groovy 中的不同循环行为

列表中 findAll 的 Groovy 过滤条件

tomcat - 使用自定义领域时,类路径如何在 tomcat6 中解析?