Настройка CLASSPATH во время выполнения - PullRequest
3 голосов
/ 24 мая 2010

Как установить переменную CLASSPATH во время выполнения при использовании IKVM?

Я пытался сделать это с помощью: java.lang.System.setProperty("java.class.path", "whatever");

Классу, который я вызываю, для работы требуется файл конфигурации в classpath - и я продолжаю получать ошибки, которые, кажется, указывают, что он не получил свои настройки.

Неправильно ли я пытаюсь добавить переменную?

Ответы [ 2 ]

3 голосов
/ 25 мая 2010

Если вы действительно не можете заранее установить classpath, используя аргумент 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().

0 голосов
/ 19 ноября 2011

Я пытался сделать то же самое. У меня были некоторые файлы JAR, скомпилированные в DLL-файл .Net, но некоторые из этих (сторонних) файлов JAR пытались загрузить свои файлы конфигурации из пути к классам Java.

Я решил проблему, указав опцию -classloader для инструмента ikvmc. Пример:

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

...