我在使用IKVM时如何在运行时设置CLASSPATH变量?
我尝试通过以下方式来进行设置:
java.lang.System.setProperty("java.class.path", "whatever");
我调用的类需要在类路径中有一个配置文件才能工作。但我一直收到错误提示,似乎表明它没有获取其设置。
请问我添加变量的方法是否不正确?
如果你真的无法使用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()
加载其资源时,你才需要运气好。
我曾试图做同样的事情。我有一些编译成 .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