对不起,也许这个问题太傻了或者已经回答了,但我找不到了。
我想知道是否有一些已知的Java类加载器能够接受类路径中的远程文件,即CLASSPATH =“http://somewhere.net/library.jar:...”之类的条目
请注意,我不是在谈论applet或Java Web Start。想想可以使用不同后端的应用程序(例如,MySQL,Oracle),我想根据用户的后端首选项在shell脚本中准备类路径,并让类加载器下载所需的来自分发服务器的jar(本例中为jdbc驱动程序)。我也不是在谈论Maven(用户只是获取二进制发行版,我不想强迫他们从源代码中构建他们需要的内容)。
答案 0 :(得分:1)
SystemClassLoader
是URLClassLoader
。你可以尝试,我留给你:
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(ClassLoader.getSystemClassLoader(), new Object[]{new URL("http://somewhere.net/library.jar")});
Class.forName("your.remote.ClassName");
让我知道:)。
答案 1 :(得分:1)
您可以使用URLClassLoader,但每次都会下载该文件,并会使代码更复杂。
如果您已经使用了shell脚本,为什么不简单地使用curl下载jar并将其放在类路径中?
答案 2 :(得分:1)
类加载是complex process。常规类路径ClassLoader可能是所有平台上所有运行时环境中的URLClassLoader,但我认为它不一定非必要。
添加类路径条目的一种方法是将Class-Path:属性添加到jarfile的META-INF/MANIFEST.MF
文件中,并使用URLClassLoader解析该属性的空格分隔值。 (Maven将一些类路径条目添加到jar文件清单中作为file://
URI,这意味着http://
或https://
也会起作用。)即使您无法获得基于URL的内容在某些运行时环境中使用普通Java类路径的类路径条目,您应该能够通过在清单文件中指定URL来使它们正常工作。
(我不熟悉Java WebStart的工作原理,但是也可能使用基于URL的类路径条目?)