Java 创建新的类加载器以重新加载类

Java 创建新的类加载器以重新加载类,java,class,build,Java,Class,Build,每次调用我的方法时,我都要创建一个新的ClassLoader 因此,我可以在不退出程序的情况下重新加载类 如何更新由ClassLoader加载的class也是一个解决方案 我如何才能做到这一点?我在这里找到了一个很好的解释性答案: 在我的例子中,重要的是有两个二进制文件夹: 一个用于测试用例,一个用于程序源 引述: URL[] urls = null; try { // Convert the file object to a URL File dir = new File(S

每次调用我的方法时,我都要创建一个新的
ClassLoader

因此,我可以在不退出程序的情况下重新加载

如何更新由
ClassLoader
加载的
class
也是一个解决方案


我如何才能做到这一点?

我在这里找到了一个很好的解释性答案:

在我的例子中,重要的是有两个二进制文件夹: 一个用于测试用例,一个用于程序源

引述:

URL[] urls = null;
try {
    // Convert the file object to a URL
    File dir = new File(System.getProperty("user.dir")
        +File.separator+"dir"+File.separator);
    URL url = dir.toURL();        // file:/c:/almanac1.4/examples/
    urls = new URL[]{url};
} catch (MalformedURLException e) {
}

try {
    // Create a new class loader with the directory
    ClassLoader cl = new URLClassLoader(urls);

    // Load in the class
    Class cls = cl.loadClass("MyReloadableClassImpl");
看到这个了吗


我认为这个博客可以满足您的需求。

我用loadClass(“string”)加载一个JavaCompiler源代码编译类,然后用JUnitCore运行这个类。在那之后,我在*.java中编辑源代码,用JavaCompiler编译它,并希望再次重新加载它+1只需添加-此解决方案仅在重新加载的类没有任何方法删除/新类引用时有效。这种方法的问题是,如果有人忘记先添加依赖类,这可能会创建NoClassDefFoundError。最好的办法是在不完全停止应用程序的情况下重新加载所有类。