2013-03-18 2 views
0

У меня есть пакет A, который зависит от пучка B. Когда код в расслоении A запускается и обращается к классу из пучка B, тогда состояние пучка B разрешается (4) вместо активного (32), и активатор пучка B также не работал. Я предполагаю, что что-то не так, но я не могу это заметить.Состояние требуемого связки разрешено вместо активного

Это манифест пучка B, сгенерированный с помощью bnd.

Manifest-Version: 1.0 
Export-Package: org.jboss.logging;uses:="org.osgi.framework,org.eclips 
e.equinox.log,org.jboss.logmanager,org.apache.log4j,org.slf4j.spi,org 
.slf4j";version="3.2.0.Beta1-SNAPSHOT" 
Build-Timestamp: Sun, 17 Mar 2013 15:07:31 +0100 
Tool: Bnd-0.0.357 
Bundle-Name: JBoss Logging 3 
Created-By: 1.7.0_10 (Oracle Corporation) 
Bundle-Vendor: JBoss by Red Hat 
Scm-Revision: 9e799bac390dbbf9c7cd55afe93dff9265fbed05 
Bundle-Version: 3.2.0.Beta1-SNAPSHOT 
Bnd-LastModified: 1363529254048 
Bundle-ManifestVersion: 2 
Bundle-Activator: org.jboss.logging.Activator 
Bundle-Description: The JBoss Logging Framework 
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt 
Bundle-SymbolicName: org.jboss.logging.jboss-logging 
Import-Package: org.apache.log4j;resolution:=optional,org.eclipse.equi 
nox.log;resolution:=optional;version="1.0",org.jboss.logging;version= 
"3.2",org.jboss.logmanager;resolution:=optional,org.osgi.framework;ve 
rsion="1.7",org.slf4j;resolution:=optional;version="1.6",org.slf4j.sp 
i;resolution:=optional;version="1.6" 
Bundle-DocURL: http://www.jboss.org 

Это манифест пучка A, сгенерированный с помощью PDE.

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Sample-view 
Bundle-SymbolicName: sample-view; singleton:=true 
Bundle-Version: 1.0.0.qualifier 
Require-Bundle: org.eclipse.core.runtime, 
org.eclipse.ui, 
org.jboss.logging.jboss-logging 
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 

ответ

3

Вздох. Бьюсь об заклад, вы бежите на Equinox. В своей вечной мудрости ребята из Eclipse решили не запускать пучки, опасаясь, что это перегрузит систему. Попытка получить пучок началась ДЕЙСТВИТЕЛЬНО слишком сложна в Eclipse. Однако в вашем случае есть простое решение: Политика активации OSGi. Это приведет к запуску вашего пакета при загрузке первого класса. Просто добавьте к B

Bundle-ActivationPolicy: lazy 
+0

Да, я бегу Equinonx, и это действительно проблема. Документация немного запутанна. Http://wiki.osgi.org/wiki/Bundle-ActivationPolicy У меня сложилось впечатление, что она просто задерживает активацию. Он не говорит, что пакет не активируется вообще, если его нет. –

+1

Не обвиняйте OSGi, Equinox явно не OSGi в этом случае, поскольку в целом все пучки должны быть запущены. –

+0

Philippe, я думаю, что написал эту страницу wiki. Следует помнить, что OSGi сама * никогда не запускает пучок. Вам всегда нужно что-то еще, например. пусковой установки или агента управления. Лучшая практика - всегда начинать все пакеты, однако Eclipse не хочет этого делать, если у вас нет 'Bundle-ActivationPolicy'. Другими словами, Eclipse наделил свою собственную дополнительную семантику на заголовок манифеста. –

Смежные вопросы