在glassfish 3.1.2.2上部署jersey / helloworld-osgi-webapp时出错

时间:2013-02-18 15:38:23

标签: java jersey osgi glassfish-3 apache-felix


当尝试在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提前, 微米。

1 个答案:

答案 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包。