由于缺少导入包的约束,如何使用maven在osgi包中添加jar依赖项,无法解析Bundle依赖性?

时间:2013-10-10 12:19:28

标签: maven jar dependencies osgi opendaylight

我是maven的新手。

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


!ENTRY org.opendaylight.controller.samples.ssr 4 0 2013-10-11 10:25:14.624 !MESSAGE FrameworkEvent ERROR !堆栈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)     at 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有一个问题。

过去几周我在这个问题之后一直在蠢蠢欲动。任何建议或解决方案请。提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

您案例中的Maven依赖关系,Group Id为 com.jcraft ,Artifact Id为 jsch ,版本为 0.1.31 (比如说)和进口包装 com.jcraft.jsch 。此外,您的OpenDaylight模块是 org.opendaylight.controller.samples.ssr

在文件 distribution / opendaylight / opendaylight-osgi-launcher.launch distribution / 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, ..."/>
...

在档案分发/ 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构建并运行。它应该工作正常。如果此依赖关系进一步链接了依赖关系,则可能会再次出现错误。以相同的方式导入这些依赖项。