2009-08-20 2 views
15

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

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

У вас есть идея об этой ошибке?

+0

Можете ли вы разместить источник активатора? – Martin

+0

Это стандартный активатор, созданный с использованием шаблонов плагинов eclipse. – penguru

ответ

16

Проверьте build.properties раздел

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


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

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

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

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


penguru добавляет:

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

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

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

+4

Я нашел ошибку после долгого отладочного сеанса с точками останова :) Где-то в коде я пытаюсь добавить элемент в нулевой список массивов! Я сосредоточился на ошибке пучка и не мог ее увидеть. Кроме того, не было исключения для списка массивов. Но очень интересно, что если я не использую точку останова, сеанс отладки не входит в класс, содержащий ошибку. Отладочный сеанс завершается с исключением, когда я пытаюсь создать объект. Итак, мы можем сказать, что это точно ClassNotFoundException :) – penguru

+0

Спасибо за помощь. – penguru

0

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

+0

Только что завершил мой ответ в ответ на этот комментарий. – VonC

1

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

3

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

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

1

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

0

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

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

Bundle-ActivationPolicy: lazy 
1

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

Так легко исправить, чтобы попробовать, если вы столкнулись с этим и CNFE не являются в соответствии с кодом:

  • Перейти к «Установка нового программного обеспечения»
  • Нажмите на «уже установлен»
  • Удалить все экземпляры вашего пакета/плагин и перезапустить

Вероятно, это было вызвано тем, что я изменил плагин ID, что делает Eclipse, рассматривать его как новый плагин.

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

0

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

0

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

1

В моем случае было это сообщение «Активатор ..invalid», но в последующие исключения были ClassNotFound Исключения в Bundle были я не изменить что-то ..

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

Bundle-ManifestVersion: 2 

в

Bundle-ManifestVersion: 3 

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

1

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

С уважением Roland

0

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

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

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

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

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

0

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

1

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

Итак:

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