2013-10-10 48 views
1

我是新来的maven。由于缺少导入包的约束,导致无法解析包依赖项,如何使用maven在osgi包中添加jar依赖项?

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


ENTRY org.opendaylight.controller.samples.ssr 4 0 2013年10月11日10:25:14.624 MESSAGE FrameworkEvent ERROR STACK 0 org.osgi.framework.BundleException:束“org.opendaylight.controller.samples.ssr_0.4.0.SNAPSHOT [36]”无法解析。原因:缺少约束:导入包:com.jcraft.jsch;版本=“0.0.0” at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332) at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle .java:1316) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323) at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java :390) at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176) at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559 ) at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544) at org.eclipse.osgi.framewor k.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457) at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243) at org.eclipse.osgi.framework。在org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1) 处的org.eclipse.osgi.framework.eventmgr处的internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438) 。 EventManager.dispatchEvent(EventManager.java:230) at 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] ERROR ooclogging.bridge.OSGI2SLF4J - Bundle:org.opendaylight.controller.samples.ssr消息:FrameworkEvent错误异常:org.osgi .framework.BundleException:捆绑包“org.opendaylight.controller.samples.ssr_0.4.0.SNAPSHOT [36]”无法解析。原因:缺少约束:导入包:com.jcraft.jsch;版本=“0.0.0”


我已经导入了该包。包中org.opendaylight.controller.samples.ssr是我自己添加的。基本上,我修改了样本中的一个包。 问题是我想在这个包中的一个类中导入一个jar依赖项com.jcraft.jsch。但是导入这个jar有问题。

在过去的几个星期里,我一直在这个问题之后酝酿。任何建议或解决方案,请。提前致谢。

+0

软件包org.opendaylight.controller.samples.ssr在任何软件包中都不可用,或者如果可用,它不会被导出。 –

+0

谢谢你:)你能再看一遍吗?我修改了这个查询一点点.. – user793735

+0

你可以telnet到春分系统上吗?如果是,那么命令“packages com.jcraft.jsch”会说什么?我认为它不在OSGi容器中。如果它在那里,我会感到惊讶。它可能位于你的一个罐子中,但是你确定它已列在Export-Package Manifest标题中?如果它位于该jar中并且列出了该软件包,那么该软件包是否处于ACTIVE状态(控制台中的ss命令)? –

回答

1

我在OpenDaylight中面临同样的问题。下面是我的一些试验和错误后想出了一个解决方案(让我知道如果你发现任何一个步骤是不必要的):

在你的情况下,Maven的依赖本来,组ID com.jcraft,工件ID作为jsch,版本号为0.1.31(说)和进口包装ias com.jcraft。jsch。此外,您的OpenDaylight模块是org.opendaylight.controller.samples.ssr

在文件分发/ opendaylight/opendaylight-OSGi的launcher.launch分销/ opendaylight/opendaylight-OSGi的发射-local.launch,添加您的依赖和模块到以下标签:

... 
<stringAttribute key="target_bundles" value="[email protected]:default,[email protected]:default, [email protected]:default ..."/> 
. 
. 
<stringAttribute key="workspace_bundles" value="[email protected]:default,[email protected]:default, ..."/> 
... 

在文件分布/ opendaylight/opendaylight.target,添加一个单元条目,

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

分布/ 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> 
... 

公/ 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构建和运行。它应该工作正常。如果这种依赖关系有进一步的链接依赖关系,你可能会再次出现错误。以相同的方式导入这些依赖关系。

相关问题