Java类加载器不会加载动态生成的类

Java类加载器不会加载动态生成的类,java,dynamic,classloader,Java,Dynamic,Classloader,如果在程序启动时类路径上不存在类,则应用程序(标准)类加载器将不会加载这些类 我的程序包含在一个可执行的jar中。它动态编译Java类,并将生成的类文件输出到类路径上的目录。类路径在启动时通过-classpath标志显式设置 编译工作很好。类文件在正确的位置生成 然而,只有当类在程序启动时出现时,加载编译类的后续尝试才会起作用 如果.class文件在程序启动时存在于磁盘上,则标准应用程序类加载器将正常加载它们。但是,如果它们在程序启动后才出现,则类加载器将抛出ClassNotFound异常。这就

如果在程序启动时类路径上不存在类,则应用程序(标准)类加载器将不会加载这些类

我的程序包含在一个可执行的jar中。它动态编译Java类,并将生成的类文件输出到类路径上的目录。类路径在启动时通过-classpath标志显式设置

编译工作很好。类文件在正确的位置生成

然而,只有当类在程序启动时出现时,加载编译类的后续尝试才会起作用

如果.class文件在程序启动时存在于磁盘上,则标准应用程序类加载器将正常加载它们。但是,如果它们在程序启动后才出现,则类加载器将抛出ClassNotFound异常。这就好像类加载器正在缓存磁盘内容

我的理解是,类加载器所做的一件事就是在磁盘上跨类路径搜索命名类。对吗?如果是这样,我的方法应该有效吗

我可以通过使用单独的URLClassLoader加载动态编译的类来解决这个问题。但是,我想了解标准应用程序类加载器失败的原因

我对此做了不少研究,但仍然不明白为什么它不起作用。也许我有点胖


请给出一个解释:-)

它动态编译Java类
这是什么Jar文件?也许类加载器会在开始时将类路径索引并保存每个类所在的位置-如果您向其中添加另一个文件,类加载器将不知道。注意:这是我的想法,我不确定。@markspace-Jar文件是我的,包含应用程序代码。代码动态编译插件。(创建和)使用
RamClassLoader