OSGi - Перестановка кандидатов не удалась из-за конфликта между импортом - PullRequest
0 голосов
/ 03 апреля 2011

Я нахожусь в ситуации, когда мой контейнер Felix OSGi не запускается должным образом после развертывания groovy с помощью:

obr: развернуть "Groovy Scripting Language" @ 1.7.3

Управлял развертыванием и запуском Groovy, пока я не перезапустил свой контейнер OSGi ... тогда большинство пакетов не запустится. FWIW, я почти уверен, что Groovy не является причиной, хотя в названии пакета есть опечатка. : -)

После некоторого устранения неполадок, включив регистрацию проводов Феликса (слава богу!), Я заметил это (среди всех неисправных пучков, аналогичная причина):

2011-04-03 16:26:43,108 DEBUG [FelixStartLevel] felix.wire - Candidate permutation failed due to a conflict between imports; will try another if possible. (org.apache.felix.framework.resolver.ResolveException: Unable to resolve module org.apache.felix.http.bundle [36.0] because it is exposed to package 'org.osgi.framework' from org.apache.felix.framework [0] and com.springsource.org.aspectj.tools [47.0] via two dependency chains.

Chain 1:
  org.apache.felix.http.bundle [36.0]
    import: (&(package=org.osgi.framework)(version>=1.3.0))
     |
    export: package=org.osgi.framework
  org.apache.felix.framework [0]

Chain 2:
  org.apache.felix.http.bundle [36.0]
    import: (&(package=org.osgi.service.log)(version>=1.3.0))
     |
    export: package=org.osgi.service.log; uses:=org.osgi.framework
  osgi.cmpn [15.0]
    import: (&(package=org.osgi.framework)(version>=1.5.0)(!(version>=2.0.0)))
     |
    export: package=org.osgi.framework
  com.springsource.org.aspectj.tools [47.0])

Похоже, что o.a.felix.framework и c.s.o.aspectj.tools экспортируют o.osgi.framework.

Я могу возобновить работу, удалив идентификатор пакета 47 (c.s.o.aspectj.tools), но еще не проверю, есть ли другие последствия. Чувствует себя не так, потому что я удалил c.s.o.aspectj.tools, но он был указан как обязательный (или необязательный) для Groovy в репозитории OBR. Фактически он был установлен с помощью команды obr: deploy для Groovy.

Похоже, c.s.o.aspectj.tools не должен был экспортировать o.osgi.framework, но это всего лишь предположение, так как я не пользуюсь аспектным инструментом.

Вопрос: Как правильно решать такие проблемы, не прибегая к образованным догадкам?

1 Ответ

1 голос
/ 03 апреля 2011

Вы правы, c.s.o.aspectj.tools не должно быть экспорта org.osgi.framework, но, видимо, это так.Если быть точным, я проверил версию 1.6.8, которая имеет следующий оператор экспорта:

org.osgi.framework;version="1.6.8.RELEASE"

Кроме того, он не import org.osgi.framework.Это просто неправильно , и я бы сказал, что стоит сообщить об ошибке команде Spring;если вы экспортируете, вы обычно должны импортировать, и я не могу придумать вескую причину пометить osg.osgi.framework другой версией, отличной от реальной.

Как вы можете обойти это сейчас?Проблема с двумя цепочками разрешения может быть решена путем подключения как http, так и cmpn к одному и тому же пакету framework;возможно, вам может помочь даже простой osgi:refresh в оболочке, поскольку объявленная версия (1.6.8.RELEASE) случайно попадает в диапазоны импорта http и cmpn.

Если вы неМне действительно не нужны aspectj вещи, я бы их пропустил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...