Активатор для пучка недействителен

Я пытаюсь создать простой плагин в eclipse. Когда я запускаю приложение, я вижу эту ошибку в файле журнала:

org.osgi.framework.BundleException: активатор для пакета org.x.y.Activator для пакета org.x.y недействителен.

Есть ли у вас какие-либо идеи об этой ошибке?

Ответы

Ответ 1

Проверьте build.properties

Если он не задает должным образом то, что должно быть в конечном двоичном результате, оно не будет работать. Проверьте файлы .class, где MANIFEST.MF говорит, что они будут.


из EclipseZone, еще одна причина для этого сообщения об ошибке:

Если вы видите сообщение в журнале, например

 The activator org.example.FooActivator for bundle org.example.foo is invalid 

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


penguru добавляет:

Ошибка возникает, когда я пытаюсь создать новый объект из любого другого класса в конструкторе класса активатора. Не является ли законным создание объекта в плагине активатора?

  • Если этот класс, если из другого плагина, который еще не активирован, может быть вашей проблемой.
  • Если этот класс не найден, это также приведет к аннулированию активатора плагинов.

Основной совет: вам может быть лучше с вашими инициализациями, выполненными в start() method Activator, а не его конструктором.

Ответ 2

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

После изменения пути к классу попытайтесь очистить и перестроить и повторно запустить. Он должен работать... с надеждой..

Ответ 3

Если вы перемещаете рабочее пространство eclipse на новый путь, тогда вы должны использовать project- > clean перед сборкой плагина, или вы встретите эту проблему.

Ответ 4

Хорошо, я ненавижу быть очевидным здесь капитаном, но я сделал эту ошибку раньше. Это также может произойти, если вы забудете продлить BundleActivator.

Ответ 5

Я провел некоторое время с этой проблемой. Наконец, я заметил, что ClassNotFoundExceptions не соответствуют моему коду, они исходили из неправильных (старых) пакетов. Я проверил, был ли какой-то другой плагин, который возился с моими отладками/экспортом, и действительно был мой плагин!

Итак, просто исправить попытку, если вы столкнулись с этим, и CNFE не соответствуют вашему коду:

  • Перейдите к разделу "Установка нового программного обеспечения"
  • Нажмите "уже установлен"
  • Удалите все экземпляры вашего пакета/плагина и перезапустите
Вероятно, это было вызвано тем, что я изменил идентификатор плагина, и Eclipse рассматривал его как новый плагин.

Еще один хороший сайт, чтобы посмотреть, если вы расстроены и застряли: http://www.eclipsezone.com/eclipse/forums/t99010.html

Ответ 6

В моем случае появилось это сообщение "Activator..invalid", но в следующих исключениях были исключения ClassNotFound в пакете, я ничего не изменил..

Guu (Добавлено решение тоже) - мой герой, после увеличения

Bundle-ManifestVersion: 2

to

Bundle-ManifestVersion: 3

все работает:)

Ответ 7

У меня такое же исключение. Основной проблемой было исключение ClassCastException. Мой пакет требует org.osgi.core 4.3, тогда как пусковая установка для равноденствия использует 4.2.

Отношения Roland

Ответ 8

Это также может произойти, если вы назвали пакет после пакета в другом пакете.

Итак:

  • если у вас есть Bundle A, который содержит пакет org.my.package.name.function,
  • и вы создаете bundle B с именем org.my.package.name.function,
    • = > тогда система может искать активатор там, а не находить.

Ответ 9

Я нашел причину ошибки. Ошибка возникает, когда я пытаюсь создать новый объект из любого другого класса в конструкторе класса активатора. Не является ли законным создание объекта в активаторе плагина?

Ответ 10

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

Однако это было исправлено путем отключения ленивой загрузки плагина. В вкладке "Графика" на вкладке "Обзор" в MANIFEST.MF снимите флажок "Включить этот плагин", когда загружается один из его классов. Или прямо в MANIFEST.MF удалить строку

Bundle-ActivationPolicy: lazy

Ответ 11

Другой капитан очевидно: если вы измените пути исходных файлов (например, src/to src/main/java), но забудьте обновить build.properties, компиляция всегда будет успешной, но ваш плагин никогда не будет работать.

Ответ 12

У меня была такая же ошибка, в моем случае я создал свой собственный конструктор с параметрами. Но я не предоставлял конструктор по умолчанию. Поэтому после удаления моего конструктора и инициализации всего в методе start() он работал как charme.

Ответ 13

Я также встретил ту же ошибку. Активатор XX для пучка XX недействителен и исключение ClassNotFoundException. Я проверил каталог plugins\и не смог найти необходимый класс.

- Поскольку нет jar файла, содержащего нужный класс, существует только соответствующий каталог. Например, нет com.hh.jar, но только каталог com.hh.

Итак, должно быть что-то неправильное в создании com.hh.jar.

if com.hh.jar ссылается на другие плагины, а затем проверяет их.

Я решил проблему, отредактировав MANIFEST.MF. Откройте его с помощью редактора манифеста Plug-in на вкладке времени выполнения, добавьте необходимые пакеты в "Экспортированные пакеты". и в "classpath" добавьте необходимые библиотеки и ".". (текущий каталог, ВАЖНО)

Ответ 14

Я также столкнулся с этим, когда "простые" файлы jar-пакетов. Если некоторые зависимости не разрешены, или банки зависят от более высокой версии JAVA, чем тот, который вы используете, активатор не запускается, предоставляя исключение выше. Быстрый способ выяснить, является ли это проблемой, - удалить банки из пути bundle-classpath (вкладка времени выполнения манифеста) и проверить, будет ли активатор работать правильно.