【问题标题】:Bundle dependency could not be resolved due to missing constraint on import package, How to add jar dependency in a an osgi bundle using maven?由于缺少对导入包的约束,无法解决捆绑包依赖关系,如何使用 maven 在 osgi 捆绑包中添加 jar 依赖项?
【发布时间】:2013-10-18 04:51:21
【问题描述】:

我是 Maven 新手。

我正在尝试在我的 opendaylight 控制器项目中导入一个 jar 依赖项 (com.jcraft.jsch)。代码编译成功。但是当控制器运行时,它会抛出以下错误。


!ENTRY org.opendaylight.controller.samples.ssr 4 0 2013-10-11 10:25:14.624 !MESSAGE 框架事件错误 !堆栈 0 org.osgi.framework.BundleException:无法解析捆绑包“org.opendaylight.controller.samples.ssr_0.4.0.SNAPSHOT [36]”。原因:缺少约束:Import-Package: com.jcraft.jsch;版本="0.0.0" 在 org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332) 在 org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316) 在 org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323) 在 org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390) 在 org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) 2013-10-11 10:25:14.627 IST [org.opendaylight.controller.logging.bridge.internal.LogListenerImpl@190c63b2] 错误 ooclogging.bridge.OSGI2SLF4J - Bundle:org.opendaylight.controller.samples.ssr 消息:FrameworkEvent错误异常:org.osgi.framework.BundleException:无法解析捆绑包“org.opendaylight.controller.samples.ssr_0.4.0.SNAPSHOT [36]”。原因:缺少约束:Import-Package: com.jcraft.jsch;版本="0.0.0"


我已经导入了那个包。 org.opendaylight.controller.samples.ssr 包是我在里面添加的。基本上,我已经修改了示例中的一个包。 问题是我试图在这个包中的一个类中导入一个 jar 依赖项 com.jcraft.jsch。但是导入这个jar有问题。

过去几周我一直在努力解决这个问题。请有任何建议或解决方案。提前致谢。

【问题讨论】:

  • 包 org.opendaylight.controller.samples.ssr 在任何捆绑包中均不可用,或者如果可用,则不会导出。
  • 谢谢 :) 你能再看看吗?我稍微修改了这个查询..
  • 你能telnet到Equinox系统吗?如果是,“packages com.jcraft.jsch”命令是什么意思?我认为它不在 OSGi 容器中。如果它在那里,我会感到惊讶。它可能在你的一个罐子里,但你确定它列在 Export-Package Manifest 标题中吗?如果它在那个 jar 中并且列出了包,那么该包是否处于 ACTIVE 状态(控制台中的 ss 命令)?

标签: maven jar dependencies osgi opendaylight


【解决方案1】:

我在 OpenDaylight 中遇到了同样的问题。这是我经过反复试验后得出的解决方案(如果您发现任何步骤是不必要的,请告诉我):

在您的情况下,Maven 依赖项将具有,组 ID 为 com.jcraft,工件 ID 为 jsch,版本为 0.1.31 (比如说)和导入的包 ias com.jcraft.jsch。此外,您的 OpenDaylight 模块是 org.opendaylight.controller.samples.ssr

在文件 distribution/opendaylight/opendaylight-osgi-launcher.launchdistribution/opendaylight/opendaylight-osgi-launcher-local.launch 中,添加您的依赖项并模块到以下标签:

...
<stringAttribute key="target_bundles" value="com.jcraft.jsch@default:default,ch.qos.logback.classic@default:default, ch.qos.logback.core@default:default ..."/>
.
.
<stringAttribute key="workspace_bundles" value="org.opendaylight.controller.samples.ssr@default:default,org.opendaylight.controller.arphandler@default:default, ..."/>
...

在文件distribution/opendaylight/opendaylight.target中,添加一个单位条目为,

...
<unit id="com.google.gson" version="2.1.0"/>
<unit id="com.jcraft.jsch" version="0.1.31"/>
...

distribution/p2site/pom.xml中,将工件条目添加为,

...
<artifact>
  <id>com.google.code.gson:gson:2.1</id>
  <transitive>false</transitive>
  <override>false</override>
</artifact>
<artifact>
  <id>com.jcraft:jsch:0.1.31</id>
  <transitive>false</transitive>
  <override>false</override>
</artifact>
...

commons/opendaylight/pom.xml中,添加依赖项为,

...
<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.1</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>com.jcraft</groupId>
  <artifactId>jsch</artifactId>
  <version>0.1.31</version>
</dependency>
...

构建并运行完整的 OpenDaylight maven。它应该可以正常工作。如果此依赖项具有进一步的链式依赖项,您可能会再次遇到错误。以相同的方式导入这些依赖项。

【讨论】:

    猜你喜欢
    • 2015-10-04
    • 2018-09-29
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多