这是我的广义术语中的问题,因为我无法发布我的实际代码。
我动态加载包含包com.jar
的jar。然后我尝试从该jar加载类com.jar.MyClass
并在新加载的类上调用doThing()
。当java.lang.NoClassDefFoundError
引用doThing()
中的另一个类并且.class文件位于jar中时,我收到com.jar
。
这是我在我的代码中尝试做的事情:
File jarFile = new File(pathToJar)
URLClassLoader classLoader = new URLClassLoader(new URL[] { jarFile.toURI().toURL() }, this.getClass().getClassLoader());
Thread.currentThread().setContextClassLoader(classLoader);
Class jarClass = Class.forName("com.jar.MyClass", true, classLoader);
Constructor<?> ctor = adapterClass.getDeclaredConstructor(Integer.class);
MyClass newMyClass = (MyClass) ctor.newInstance(1);
newMyClass.doThing(); //At some point in method makes reference to com.jar.AnotherClass
我不知道为什么我可以加载com.jar.MyClass
,但它无法在同一个jar中引用其他类。