【问题标题】:Downloading all Jersey OSGi Bundle dependancies automatically自动下载所有 Jersey OSGi Bundle 依赖项
【发布时间】:2012-04-07 11:38:28
【问题描述】:

我正在尝试通过 OSGi(特别是 Karaf)使用 Jersey。为此,我从 Maven 下载了 this bundle jar 并将其放入我的 Karaf 部署目录。但是,当我尝试启动捆绑包时,它无法解决它的任何依赖项。它似乎也在寻找每个依赖项的 0.0.0 版本,这似乎是错误的。

将此捆绑包放入我的项目的最佳方式是什么?您是否必须手动下载所有依赖项,或者我可以使用一些现有的具有此捆绑包的 OBR?我在哪里可以找到这个?

【问题讨论】:

  • 我没有真正的答案给你,但我可以指出,寻找版本 0.0.0 不一定是错误的。在 OSGi 中,这实际上意味着“至少版本 0.0.0”或换句话说 any 版本。泽西岛这样做实际上很愚蠢,但这不是你的错!
  • 很高兴知道,谢谢。
  • 已在 1.13 及更高版本中修复

标签: osgi jersey apache-karaf obr


【解决方案1】:

我将 Jersey 与 Karaf 一起使用,使用此依赖项而不是 jersey-bundle 没有问题:

<!-- Jersey -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.12</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.12</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.12</version>
</dependency>   

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency> 

我现在已经在最后一个 Karaf Apache 控制台上进行了测试,这对我有用:

$ bin/karaf
  Apache Karaf (2.2.5)

karaf@root> install mvn:com.sun.jersey/jersey-core/1.12
Bundle ID: 49
karaf@root> install mvn:com.sun.jersey/jersey-server/1.12
Bundle ID: 50
karaf@root> install mvn:javax.ws.rs/jsr311-api/1.1.1
Bundle ID: 51
karaf@root> install mvn:com.sun.jersey/jersey-json/1.12
Bundle ID: 52
karaf@root> install mvn:org.codehaus.jackson/jackson-core-asl/1.9.5
Bundle ID: 53
karaf@root> install mvn:org.codehaus.jackson/jackson-jaxrs/1.9.5
Bundle ID: 54
karaf@root> install mvn:org.codehaus.jackson/jackson-mapper-asl/1.9.5
Bundle ID: 55
karaf@root> install mvn:org.codehaus.jettison/jettison/1.1
Bundle ID: 56
karaf@root> start 49 50 51 52 53 54 55 56
karaf@root> list 
   ID   State         Blueprint      Level  Name
[  49] [Active     ] [            ] [   60] jersey-core (1.12)
[  50] [Active     ] [            ] [   60] jersey-server (1.12)
[  51] [Active     ] [            ] [   60] jsr311-api (1.1.1)
[  52] [Active     ] [            ] [   60] jersey-json (1.12)
[  53] [Active     ] [            ] [   60] Jackson JSON processor (1.9.5)
[  54] [Active     ] [            ] [   60] JAX-RS provider for JSON content type, using Jackson data binding (1.9.5)
[  55] [Active     ] [            ] [   60] Data mapper for Jackson JSON processor (1.9.5)
[  56] [Active     ] [            ] [   60] jettison (1.1)

【讨论】:

  • 我将不得不等待几天来尝试这个以确保它有效,但我也依赖于 com.sun.jersey.api.json,我不确定是什么提供了这一点。我记得它不是您列出的那三个之一。
  • 好的,那么你需要更多的东西。我已经添加了所有 jersey-json 依赖项。
  • 所以这让 Eclipse 很满意(在我为 jersey-servlet 添加了一个缺失的包之后),而且似乎我至少拥有所有必需的包(谢谢),但是有些包没有由于使用冲突而开始。例如,当我启动 jersey-core 时,我得到“无法解决。原因:包使用冲突:Import-Package: com.sun.jersey.api.uri; version="0.0.0"”。但是,当我通过 eclipse 尝试时,这似乎只是一个问题。当我在 Eclipse 之外开始工作时,它似乎可以正确解决。有什么建议吗?感谢您的帮助。
  • 我不知道。我总是将 Karaf 与远程调试和 dev:watch 一起使用
  • 进一步检查,当我在 Eclipse 之外启动我的包时,我得到以下信息:“无法解析模块 myBundle,因为它暴露于 javax.ws 中的包‘javax.ws.rs’。 rs.jsr311-api [52.0] 和 com.sun.jersey.jersey-core [65.0] 通过两个依赖链。“。我怀疑这与为什么它在 Eclipse 中也不起作用有关。
【解决方案2】:

我在 Karaf (3.0.1) 中也尝试过,但效果很好。我使用了 Blueprint(在 features.xml 中),并将以下 3 个 JAR 作为捆绑包添加到我的功能中。我只需要在 REST 服务中进行 JSON 转换。

<feature name="feature-name-test" version="${pom.version}">
  ....
  <bundle>mvn:org.codehaus.jackson/jackson-core-asl/${jackson.version}</bundle
  <bundle>mvn:org.codehaus.jackson/jackson-mapper-asl/${jackson.version}</bundle>
  <bundle>mvn:org.codehaus.jackson/jackson-jaxrs/${jackson.version}</bundle>
  ....
</feature>

其中 ${jackson.version} 是在 pom.xml 中定义的属性(在我的例子中是 1.9.0)。 如果你只是从 Karaf 控制台安装它们,同样的方法也可以工作。

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 2013-02-01
    • 2015-06-07
    • 2016-06-26
    • 2011-05-23
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多