我知道已经有很多类似的问题在这里,但我不能得到任何聪明形成它们。 我想加载一个JAR文件中的一类,在这一点上,这是没有问题的,但是当我想的路径传递给我自己的ClassLoader它抛出一个异常,它无法找到类。 是否有可能加载使用绝对路径罐内一类? 例如,
Class cls = loader.loadClass(/path/MyPlugin.jar/MyPlugin.class);
但是,当我这样做:
File test = new File("path/plugins/MyPlugin.jar/MyPlugin.class");
System.out.println(test.exists());
它打印出假的。 我试着用MyPlugin.jar!/MyPlugin.class
或MyPlugin.jar.jar!MyPlugin.class
我已经看到有时在网络上,即使我真的不知道这是什么意思?
当我这样做,它发现了类:
URLClassLoader loader = new URLClassLoader(new URL[] { "path/plugins/MyPlugin.jar" });
Class cl = loader.loadClass("MyPlugin");
但现在,我怎么能接受的路径? 类似URL url = cl.getResource("MyPlugin");
(返回一个空)
您可以使用获得的URL类路径的资源中ClassLoader.getResources 。 若要寻找特定类别的罐子,你可以使用以下
URL url = classLoader.getResource("com/example/SomeClass.class");
JarURLConnection connection = (JarURLConnection) url.openConnection();
JarFile file = connection.getJarFile();
String jarPath = file.getName();
其中classLoader
能够找到你所要加载的类的任何类加载器。 如果罐子是你的应用程序的类路径的一部分,你可以使用系统类加载器:
ClassLoader classLoader = ClassLoader.getSystemClassloader();
否则,你需要知道的jar文件的位置提前,并创建一个实例URLClassLoader
,经过罐子在构造函数:
ClassLoader classLoader = new URLClassLoader(new URL[]{new URL("path/to/the/jar/file.jar")});
然后用它来加载类。
如果您要访问的文件在你的jar文件,你必须把它放在同一个目录中的类文件。
例如,如果Main.class在斌/我的/包装/ Main.class可以存储在同一目录中MyPlugin.class(斌/我的/包装/ MyPlugin.class),然后,如果你想访问该文件使用
URL url = Main.getResource("MyPlugin.class");
它采用Main.class的位置,你的项目为根。
希望能帮助到你!