如何在运行时加载和初始化类/ jar / ...即使它不在classPath中?

时间:2012-11-28 12:02:12

标签: java url reflection classloader

我想初始化一个在编译期间未知的类(但是实现了一个已知的接口)。

所以我尝试过这样的事情:

Class<?> cls = class.foreName("NotKnown",true,ClassLoader.getSystemClassLoader());

它在Eclipse中工作,但作为一个可运行的jar文件,我发现这不起作用,因为它不会加载一个不在classPath中的类。

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

您需要创建新的类加载器,以便从新类所在的文件夹中加载类:

ClassLoader cl = new URLClassLoader(new URL[] { ... });
Class<?> cls = cl.loadClass("NotKnown");

即。如果您有一个课程foo.bar.Baz且已编译为/someFolder/foo/bar/Baz.class,则应使用new File("/someFolder").toURI().toURL()作为文件夹来加载您的课程。