Проблема в том, что каждый плагин имеет свой собственный Classloader, а Hibernate использует Reflection для поиска нужных классов.
У меня есть очень хорошая статья об этой проблеме, но эта на немецком языке. Я постараюсь объяснить, что вам нужно делать.
Чтобы разделить структуру данных на несколько плагинов, вы должны поместить ее в плагин и включить функцию под названием buddy-policy .
Допустим, у вас есть плагин main-application, который запускает hibernate при запуске, этот плагин должен «видеть» классы из datastructure-plugin. Для этого основной плагин устанавливает свою Buddy-Policy на "зарегистрированный", а плагин datastructure-plugin регистрируется как "приятель" . К сожалению, вы должны сделать все это прямо в файле манифеста, по крайней мере, в 3.3 не было никакого способа сделать это в редакторе.
Как только эта политика собеседника сработает, Hibernate также будет работать.
Я посмотрел свое старое приложение, и вот как я это сделал.
- Основное приложение (toolseye.rcp) зависит от плагина гибернации (de.eye4eye.hibernate) и плагина структуры данных (toolseye.datastructures)
- Плагин hibernate определяет свою политику собеседников как "зарегистрированную"
- Плагин структуры данных регистрируется в плагине hibernate
Вот важные строки:
Hibernate-плагин de.eye4eye.hibernate
Eclipse-BuddyPolicy: registered
Datastructure-plugin toolseye.datastructures
Eclipse-RegisterBuddy: de.eye4eye.hibernate
Поместите эти строки прямо в MANIFEST.MF
Оба плагина должны переэкспортировать свои пакеты, чтобы их могло использовать основное приложение или любой другой слой между ними.
Надеюсь, что это помогло.