在运行时设置CLASSPATH

3

我在使用IKVM时如何在运行时设置CLASSPATH变量?

我尝试通过以下方式来进行设置: java.lang.System.setProperty("java.class.path", "whatever");

我调用的类需要在类路径中有一个配置文件才能工作。但我一直收到错误提示,似乎表明它没有获取其设置。

请问我添加变量的方法是否不正确?

2个回答

3

如果你真的无法使用java-cp-classpath参数来预先设置类路径(顺便问一下,为什么不这样做?那是正常的方法),那么你可以尝试使用URLClassLoader。以下是一个开始的示例:

URL url = new URL(whateverPath);
ClassLoader contextCL = Thread.currentThread().getContextClassLoader();
ClassLoader urlCL = URLClassLoader.newInstance(new URL[] { url }, contextCL);
Thread.currentThread().setContextClassLoader(urlCL);
// ...

只有在你调用的类确实通过Thread.currentThread().getContextClassLoader().getResource()加载其资源,而不是通过SomeClass.class.getClassLoader().getResource()加载其资源时,你才需要运气好。


我无法预先设置类路径的原因是我正在使用IKVM虚拟机在.Net中运行Java代码(将jar文件重新编译为.net程序集)。IKVM不会从类路径中读取。但是,上面的示例对于任何Java代码都非常有效 :) - Ciddan

0

我曾试图做同样的事情。我有一些编译成 .Net dll 的 jar 文件,但其中一些(第三方)jar 文件尝试从 java classpath 加载它们的配置文件。

我通过为 ikvmc 工具指定 -classloader 选项来解决了这个问题。例如:

ikvmc -out:mydotnetapp.dll -classloader:ikvm.runtime.ClassPathAssemblyClassLoader c:/myjavaapp/lib/*.jar

这对我很有效!

解决方案来源:http://old.nabble.com/Not-able-to-load-files-from-ClassPath-td31141788.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接