2013-10-10 92 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構建和運行。它應該工作正常。如果這種依賴關係有進一步的鏈接依賴關係,你可能會再次出現錯誤。以相同的方式導入這些依賴關係。

相關問題