Her biri sadece bir manifest içeren dört demetim var. Paketler
apphangi ithalatcom.example.foo.fragmentvecom.example.barfoohangi ihracatlarcom.example.foo;uses:=com.example.foo.cfgfoo.fragmentfoobu ihracata bağlı bir parçacom.example.foo.fragmentvecom.example.foo.fragment.cfg;uses:=com.example.foo.fragmentbarhangi ihracatcom.example.barve ithalatcom.example.foo
Paket düzeyinde bağımlılık grafiği :
app -> bar
| |
| v
| foo
| |
v v
foo.fragment
Bu paketleri JBoss AS 7.2'ye bir kerede kurduğumda, gayet iyi çalışıyorlar. Ancak, apppaketi ilk kez veya başarıyla başladıktan ve kaldırdıktan sonra diğerlerinden sonra yüklersem , aşağıdaki kısıtlama ihlali kullanılır:
Caused by: org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource com.example.app [HostBundleRevision[com.example.app:0.0.
0]] because it is exposed to package 'com.example.foo.fragment' from resources com.example.foo [HostBundleRevision[com.example.foo:0.0.0]] and com.example.foo [HostBund
leRevision[com.example.foo:0.0.0]] via two dependency chains.
Chain 1:
com.example.app [HostBundleRevision[com.example.app:0.0.0]]
import: null
|
export: osgi.wiring.package=com.example.foo.fragment
com.example.foo [HostBundleRevision[com.example.foo:0.0.0]]
Chain 2:
com.example.app [HostBundleRevision[com.example.app:0.0.0]]
import: null
|
export: osgi.wiring.package=com.example.bar; uses:=com.example.foo
com.example.bar [HostBundleRevision[com.example.bar:0.0.0]]
import: null
|
export: osgi.wiring.package=com.example.foo; uses:=com.example.foo.fragment
export: osgi.wiring.package=com.example.foo.fragment
com.example.foo [HostBundleRevision[com.example.foo:0.0.0]]
at org.apache.felix.resolver.ResolverImpl.checkPackageSpaceConsistency(ResolverImpl.java:1142)
at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:197)
at org.jboss.osgi.resolver.felix.StatelessResolver.resolve(StatelessResolver.java:56)
at org.jboss.osgi.framework.internal.ResolverImpl.resolveAndApply(ResolverImpl.java:137)
at org.jboss.as.osgi.service.BundleLifecycleIntegration$BundleLifecycleImpl.activateDeferredPhase(BundleLifecycleIntegration.java:296)
... 31 more
Tam tezahürler:
app.jar/META-INF/MANIFEST.MF
----------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.app
Import-Package: com.example.foo.fragment,com.example.bar
----------------------------
foo.jar/META-INF/MANIFEST.MF
----------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.foo
Export-Package: com.example.foo;uses:="com.example.foo.cfg"
-------------------------------------
foo.fragment.jar/META-INF/MANIFEST.MF
-------------------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.foo.fragment
Fragment-Host: com.example.foo
Export-Package: com.example.foo.fragment,com.example.foo.cfg;uses:="co
m.example.foo.fragment"
----------------------------
bar.jar/META-INF/MANIFEST.MF
----------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.bar
Export-Package: com.example.bar;uses:="com.example.foo"
Import-Package: com.example.foo
Bağımsız Apache Felix 4.2.1'de yukarıdaki hatayı yeniden üretemedim.
Bu davranışın nedeni nedir? Manifest'ten Fragment-Host: com.example.foosatırı silersem, hatasız bir foo.fragmentşekilde yeniden yükleyebilirim app. Bu JBoss AS 7.2'de bir hata mı?
org.hibernate.annotationsolabilir ve OSGi platformu, OSGi platformu uygulamam olmadan başlarsa, Spring ORM paketinin bağımlılığı olarak bunu çözer. Daha sonra uygulamamı dağıtıyorum ve OSGi org.hibernate.annotations, Spring ORM paketine çözümlenen paketle uyumlu olmadığı için sorunu çözemiyor . Kulağa mantıklı geliyor mu?
org.hibernate.annotationsbir parça Fragment-Host: com.springsource.org.hibernate.