setClassLoader () Java - PullRequest
       20

setClassLoader () Java

0 голосов
/ 09 декабря 2011

У меня есть JavaProject с одним тестом JUnit, и этот тест имеет следующий код:

ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();
//Get the URLs
URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
for(int i=0; i< urls.length; i++) {
    System.out.println(urls[i].getFile());
}

и вывод:

/home/ubfeup/workspace/Nano/bin/
/usr/share/java/junit4-4.8.2.jar
/usr/share/java/hamcrest-core-1.1.jar
/home/ubfeup/.eclipse/org.eclipse.platform_3.5.0_155965261/configuration/org.eclipse.osgi/bundles/113/1/.cp/
/home/ubfeup/.eclipse/org.eclipse.platform_3.5.0_155965261/configuration/org.eclipse.osgi/bundles/111/1/.cp/
/home/ubfeup/.eclipse/org.eclipse.platform_3.5.0_155965261/configuration/org.eclipse.osgi/bundles/112/1/.cp/

Но когда я запускаю свой Eclipse Pluginмой плагин имеет JUnitCore и запускает некоторые (не все) тесты JUnit из проекта) вывод только:

/usr/lib/eclipse/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar

Мне нужен каталог Bin в ClassLoader, так как я могу установить URL ClassLoader?

- Приветствия, ZéCarlos

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Вы не можете изменить URL-адреса, используемые загрузчиком классов. Я действительно не могу сказать, что вы пытаетесь сделать здесь, но я подозреваю, что одно из следующего поможет:

1) Вы можете создать свой собственный URLClassLoader с нужными URL-адресами и использовать его для загрузки классов.

2) Eclipse предлагает специальный механизм поиска ресурсов в плагинах: см., Например, здесь.

Из нашего обсуждения ниже кажется, что вы хотите иметь возможность использовать ClassLoader другого плагина, определяемого динамически во время выполнения. Я не могу сказать, что когда-либо выполнял эту конкретную задачу - у Eclipse есть точки расширения , которые вы обычно используете для такого рода вещей, - но я бы попробовал следующее. Вам понадобится имя класса, определенного в другом плагине - возможно, разработчик каким-то образом предоставит его вашему инструменту. Тогда вы можете сказать

Bundle b = Bundle.getBundle(pluginIdOfOtherPlugin);
Class c = b.loadClass(nameOfTheOneKnownClass);
ClassLoader loader = c.getClassLoader();

и затем вы можете делать все, что захотите, с помощью loader (включая создание собственного URLClassLoader, который делегирует его.)

0 голосов
/ 12 декабря 2011

Если вы добавили плагин Eclipse и хотите работать с Java-проектом в вашей рабочей области, вам нужно обратиться к Руководству программиста JDT . Как плагин eclipse, Nano classpath не будет доступен вашему экземпляру плагина времени выполнения.

Чтобы получить информацию о пути к классам, посмотрите Установка пути сборки Java .

Это будет иметь значение, как вы запускаете Nano? В той же JVM или другой?

...