Java 如何加载和初始化类/jar/。。。在运行时,即使它不在类路径中?
我想初始化一个在编译过程中未知的类(但实现了一个已知的接口) 所以我试过这样的方法:Java 如何加载和初始化类/jar/。。。在运行时,即使它不在类路径中?,java,url,reflection,classloader,Java,Url,Reflection,Classloader,我想初始化一个在编译过程中未知的类(但实现了一个已知的接口) 所以我试过这样的方法: Class<?> cls = class.foreName("NotKnown",true,ClassLoader.getSystemClassLoader()); Class cls=Class.foreName(“NotKnown”,true,ClassLoader.getSystemClassLoader()); 它在Eclipse中工作,但作为一个可运行的jar文件,我发现它不起作用,因
Class<?> cls = class.foreName("NotKnown",true,ClassLoader.getSystemClassLoader());
Class cls=Class.foreName(“NotKnown”,true,ClassLoader.getSystemClassLoader());
它在Eclipse中工作,但作为一个可运行的jar文件,我发现它不起作用,因为它不会加载超出类路径的类
如何使其工作?您需要创建新的类加载器,从新类所在的文件夹中加载类:
ClassLoader cl = new URLClassLoader(new URL[] { ... });
Class<?> cls = cl.loadClass("NotKnown");
ClassLoader cl=newurlclassloader(newurl[]{…});
类别cls=cl.loadClass(“未知”);
也就是说,如果您有一个类foo.bar.Baz
,并且它被编译成/someFolder/foo/bar/Baz.class
,那么您应该使用新文件(“/someFolder”).toURI().tour()
作为从中加载类的文件夹