当尝试在Glassfish 3.1.2.2上部署示例泽西战争包代码(helloworld-osgi-webapp on git:https://github.com/jersey/jersey-1.x/tree/master/jersey/samples/helloworld-osgi-webapp)时,我收到以下osgi错误:
remote failure: Error occurred during deployment: Exception while loading the app:
org.osgi.framework.BundleException: Unresolved constraint in bundle war-bundle [344]:
Unable to resolve 344.0: missing requirement [344.0] osgi.wiring.package; (&(osgi.wiring.package=com.sun.jersey.api.core)(version>=1.18.0)(!(version>=2.0.0))).
Please see server.log for more details.
Command deploy failed
为什么maven felix插件没有在战争中嵌入库?
Thanx提前,
微米。
答案 0 :(得分:1)
直接的原因是在你的应用程序中它没有被配置为这样做,并且它的原因不是在OSGi世界中它不应该。
来自pom它所提供的范围:
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
<classifier>cobertura</classifier>
它只会嵌入运行时&amp;编译范围:
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
并使用OSGi标准import-package将jersey-servlet依赖项导入为OSGi服务:
<Import-Package>com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet,*</Import-Package>
在OSGi世界中,依赖关系应该作为单独的OSGi包部署,而不是嵌入在战争中。这就是你的榜样。因此,您应该将泽西部署为单独的OSGi包。