Использование Javassist в плагине Eclipse - PullRequest
0 голосов
/ 30 ноября 2011

У меня проблемы с использованием javassist при развертывании приложения в качестве плагина Eclipse, Конкретно, следующий код:

ClassPool.getDefault().get(aClassName);

бросает: javassist.NotFoundException.

Код работает нормально, если не используется как часть плагина. Я пытаюсь понять, связана ли проблема с конфигурацией пути к классу моего плагина (похоже, это не так), или с тем, что связано с загрузчиком классов, который Eclipse использует при выполнении проекта плагина в качестве приложения Eclipse.

Код, вызывающий проблему, является частью пользовательского редактора Eclipse. Так появляется, когда пользователь пытается открыть документ, связанный с редактором. Класс javassist пытается загрузить является частью классов плагинов.

Заранее спасибо за любую подсказку!.

1 Ответ

2 голосов
/ 01 декабря 2011

Из документации ClassPool :

Возвращает пул классов по умолчанию. Возвращаемый объект всегда идентичен, поскольку этот метод является фабрикой-одиночкой.

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

ClassPool, возвращаемый ClassPool.getDefault(), добавляет только системный путь к классу. Плагины Eclipse не загружаются системным загрузчиком классов, поэтому он не сможет видеть классы вашего плагина.

Вам необходимо добавить загрузчик классов вашего плагина в пул классов, чтобы он мог видеть эти классы. Это можно сделать через:

ClassLoader pluginLoader = ...;
ClassPool pool = ClassPool.getDefault();
pool.appendClassPath(new LoaderClassPath(pluginLoader));

где pluginLoader - загрузчик классов вашего плагина. Самый простой способ получить это, вероятно, через

pluginLoader = <one of your plugin's classes>.class.getClassLoader();
...