Eclipse RCP: добавьте внешние каталоги в путь к классам

У меня есть приложение eclipse RCP, куда мне нужно добавить несколько внешних файлов jar. Проблема в том, что я не могу добавить банки просто в плагин и добавить этот плагин в свое приложение RCP.

По нескольким причинам я должен добавлять пути только к каталогам, в которых расположены файлы jar. Эти файлы jar должны быть добавлены в путь к классам программы при запуске. А пути к директориям - это переменная (например, они помещаются в файл).

Есть ли возможность как-то добавить внешние пути в путь к классам?


person fyaa    schedule 17.07.2013    source источник
comment
Могу ли я добавить что-то к полученному eclipise.ini s.th. Я могу расширить путь к классам?   -  person fyaa    schedule 19.07.2013
comment
М-м-м??? Может быть, пользовательский загрузчик классов? И затем вы можете поделиться интерфейсами API для доступа к этим классам или использовать отражение. Кроме того, если эти каталоги содержат пакеты, вы можете установить их через платформу Equinox.   -  person Ezhik    schedule 21.07.2013
comment
Если вы выберете способ OSGi, посмотрите на BundleContext.installBundle(location, stream)   -  person Ezhik    schedule 21.07.2013


Ответы (1)


добавить внешний каталог в путь к классам, есть три метода:

>  **1. System.setProperty("java.class.path",
> System.getProperty("java.class.path")+";"+"directory");**
  1. Файл файл = новый файл ("/home/../my.jar"); URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Метод add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class }); добавить.setAccessible (истина); add.invoke(загрузчик классов, новый объект[] {file.toURI().toURL()});

  2. настроить переменную classpath в .bashrc

person CHmoonKa    schedule 18.07.2013
comment
Первое явно не работает. И третий вариант довольно странный. Второе работает как-то, но в моем случае я получаю NoSuchMethodError при вызове методов динамически добавляемых jar-файлов. - person fyaa; 18.07.2013
comment
Вы правы, система считывает свойство при запуске, поэтому изменить его во время выполнения не получится. - person CHmoonKa; 19.07.2013