我有一个我的应用程序生成的类 foo,然后使用命令行编译,然后使用自定义类加载器加载。
必须这样做的原因是应用程序为类 foo “生成 java 代码”,然后它使用类加载器将其合并到自己的程序中。作为一个应用程序,这工作正常。
现在我正在尝试将其移植到tomcat。
自定义类加载器从 tomcat 外部加载此文件(这可能是一个问题,但我没有看到有关此的错误消息,应用程序生成,为 foo.java 写入文件,调用 javac 来构建它,并且类加载器肯定会找到foo.class 因为它找不到 fooparent。
fooparent 已经在应用程序中,我在 tomcat 加载的 jar 文件中看到它。
同样,作为一个应用程序,这是可行的。
现在,
foo 扩展了 fooparent。
我读到: ClassLoaders 是分层的,这意味着您的动态加载的类可以访问其所有父类的类,但父类无法直接访问其类。但我没有被告知解决方案是什么?
似乎在tomcat中,它加载了foo类,然后为“fooparent”提供了一个NoClassDefFoundError。看起来 foo 的父级之前是由父类加载器加载的,但是我的自定义类加载器对于其他类加载器已经加载的内容是不可见的,并且在某种意义上是集成的。
我试图找出我是否正在尝试做不可能的事情以及我是否应该放弃它。