2017-03-27 44 views
1

我對OSGI和KURA很新。自昨天開始,我正在處理一個問題,我不明白其原因。是否需要導入傳遞依賴關係作爲包到KURA

請告訴我,如果我的方式是錯誤的。

我在我的項目中使用dropbox-core-sdk(版本3.0.0)。我已經下載了它的jar,並且我研究了它對jackson-core(版本2.7.4)的依賴。我也下載了它的jar,並且我創建了一個包含dropbox-core-sdk.jarjackson-core.jar的包。

首先,我已經導入了依賴關係(包含dropbox和jackson的包),然後導入了我自己的項目。

當我開始我的項目時,它會拋出以下異常;

java.lang.NoClassDefFoundError: javax/net/ssl/HttpsURLConnection 
    at com.dropbox.core.http.StandardHttpRequestor.prepRequest(StandardHttpRequestor.java:196) 
    at com.dropbox.core.http.StandardHttpRequestor.startPost(StandardHttpRequestor.java:70) 
    at com.dropbox.core.http.StandardHttpRequestor.startPost(StandardHttpRequestor.java:28) 
    at com.dropbox.core.DbxRequestUtil.startPostRaw(DbxRequestUtil.java:232) 
    at com.dropbox.core.v2.DbxRawClientV2$1.execute(DbxRawClientV2.java:100) 
    at com.dropbox.core.v2.DbxRawClientV2.executeRetriable(DbxRawClientV2.java:256) 
    at com.dropbox.core.v2.DbxRawClientV2.rpcStyle(DbxRawClientV2.java:97) 
    at com.dropbox.core.v2.users.DbxUserUsersRequests.getCurrentAccount(DbxUserUsersRequests.java:120) 
    at org.eclipse.kura.example.hello_osgi.DropBoxTransfer.<init>(DropBoxTransfer.java:37) 
    at org.eclipse.kura.example.hello_osgi.DropBoxUpdateJob.execute(DropBoxUpdateJob.java:20) 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) 

我有兩個相關的問題;

  1. 當我們從公共api創建一個包時,這個包是否應該包含public api的傳遞依賴關係?

  2. 即使我提供Dropbox API與它的傳遞依賴關係,爲什麼拋出程序這樣的異常?

回答

1

當包加載一個類,不存在於該束並且沒有Import-Package語句爲包之類的通常NoClassDefFoundError發生。

創建包時,請確保您使用bnd自動創建具有合適Import-PackageExport-Package指令的清單。

我總是使用該構建從jar中創建一個包。當我使用maven時,我會使用maven插件。 See this question for some possible ways to create bundles

+0

當我創建bundle時,我正在使用eclipse文件 - > new - > other - >插件來自現有的JAR Archieves。這不是創建捆綁包的好方法嗎? –

+0

此外,我怎麼會知道我應該從「java.lang.NoClassDefFoundError:javax/net/ssl/HttpsURLConnection」這個語句導入哪個包? –

+0

您需要導入的軟件包是「javax.net.ssl」。日蝕pde支持很糟糕。我建議使用maven構建來構建包。查看創建套件的選項的答案。 –