it-swarm.com.ru

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

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

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

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

16
penguru

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

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


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

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

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

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


pengur добавляет:

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

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

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

17
VonC

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

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

3
A Nair

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

1
Peica

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

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

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

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

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

1
Guu

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

1
Jared

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

Гуу (тоже выложил решение) мой герой, после увеличивается

Bundle-ManifestVersion: 2

в

Bundle-ManifestVersion: 3

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

1
Matthias H

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

С уважением, Роланд

1
Roland

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

Так:

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

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

0
koppor

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

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

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

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

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

0
anh

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

0
penguru

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

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

Bundle-ActivationPolicy: lazy
0
Libor Jelinek

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

0
keesp

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

0
Christian Lutz