2013-05-03 2 views
1

Я сделал плагин eclipse, который действует на JavaProject. Ему нужен доступ к информации, содержащейся в байт-коде классов проекта, и поэтому я использовал URLClassLoader (говоря ему, что классы находятся в папке «bin» проекта), чтобы получить ссылку на классы и получить все необходимую мне информацию. К сожалению, когда я вызываю метод loadClass("a certain class in JavaProject") я получаю сообщение об ошибке такого типа:Загрузка класса в плагин eclipse

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javassist/bytecode/BadBytecode 

Я обнаружил, что ошибки такого рода из-за того, что внешние библиотеки добавлены к JavaProject в BuildPath не «известен "по загрузчику классов: классы этих библиотек используются JavaProject в классах

в предыдущем случае использовался класс BadBytecode из библиотеки Javassist в этом утверждении класса JavaProject

public static void main(String[] args) throws NotFoundException, BadBytecode, IOException, CannotCompileException{ 

Как я могу сделать свой плагин видимым для классов внешних библиотек, импортированных в проект java?

ответ

0

Вы можете получить доступ к пути построения Java-проекта с помощью API JavaCore.create ([IProject]), который предоставляет вам проект IJavaProject, который имеет API для прохождения пути сборки. Сказав это, вы обязательно должны указать не. URLClassLoader не имеет понятия перезагрузки существующих классов, поэтому он никогда не увидит обновленные версии, поскольку пользователь редактирует их код, и он имеет тенденцию блокировать файлы jar (например, те, что указаны на пути сборки). JDT имеет API для безопасной структуры типа перемещения Java Project, который не включает использование загрузчиков классов.

0

Вы должны получить загрузчик классов в выбранном проекте java, а затем использовать загрузчик классов для загрузки класса. Классный загрузчик Java-проекта отличается от загрузчика классов в плагине eclipse. см. Детальный код по следующей ссылке: https://sdqweb.ipd.kit.edu/wiki/JDT_Tutorial:_Class_Loading_in_a_running_plugin

Смежные вопросы