类路径中的远程jar

时间:2013-01-09 22:34:02

标签: java classpath classloader remoteobject

对不起,也许这个问题太傻了或者已经回答了,但我找不到了。

我想知道是否有一些已知的Java类加载器能够接受类路径中的远程文件,即CLASSPATH =“http://somewhere.net/library.jar:...”之类的条目

请注意,我不是在谈论applet或Java Web Start。想想可以使用不同后端的应用程序(例如,MySQL,Oracle),我想根据用户的后端首选项在shell脚本中准备类路径,并让类加载器下载所需的来自分发服务器的jar(本例中为jdbc驱动程序)。我也不是在谈论Maven(用户只是获取二进制发行版,我不想强​​迫他们从源代码中构建他们需要的内容)。

3 个答案:

答案 0 :(得分:1)

SystemClassLoaderURLClassLoader。你可以尝试,我留给你:

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的类路径条目?)