2014-02-18 101 views
1

限制類使用端點我需要的軟件包com.sun.net.httpserver.*使用了OSGi包

使用Eclipse IDE我找到了一種方法來使用這個類在訪問類與SSL發佈。但出口束並在另一春分OSGi的安裝運行他們,我不能啓動捆綁拋出以下錯誤:

java.lang.NoClassDefFoundError: com/sun/net/httpserver/HttpsConfigurator 

任何人的想法如何解決這個問題呢?

謝謝!

+0

必須將com.sun.net.httpserver作爲包中的導入包,並且在容器中必須有一些包,該包導出該包。 –

+0

馬塞爾的解決方案確實是解決您的問題,但恕我直言,這不是要走的路(這是非常不可能的,這確實是需要的)。 com.sun。*包意味着是私有的,應該被視爲這樣。您的問題可能有更標準的解決方案。如果你詳細說明這個問題,你可能會得到一個更好的解決方案。 –

回答

6

您所指的軟件包是JDK的一部分。您需要公開它,以使其可以在OSGi中使用,並且您有兩種選擇:

第一個,也是大多數情況下首選的選項是通過系統軟件包公開此軟件包。 OSGi框架有,你可以設置爲做到這一點的屬性:

org.osgi.framework.system.packages.extra=... 

正如它的價值,你給它提供一個逗號分隔的要公開的軟件包列表,在已經曝光的那些頂部由框架。在你的情況下,至少com.sun.net.httpserver,但可能會有更多的軟件包,你需要。在這種情況下,請確保使用此軟件包的軟件包導入此軟件包。

第二個選項是使用啓動委派機制。它只能作爲最後的手段使用,因爲它會打破模塊化,如果不仔細使用它可能會導致其他問題。再次,這是你需要設置一個屬性:

org.osgi.framework.bootdelegation=* 

在這裏,你可以提供一個逗號分隔的,應該由引導類加載器加載的軟件包列表。支持通配符(如上例所示),但鼓勵您儘可能具體,因此在您的情況下,例如使用com.sun。*作爲值。

+0

Thanls Marcel,工作正常! – mpsat

+0

我在日食Equinox上運行的KURA下有同樣的問題,我怎樣才能設置系統包的屬性? – sabrina2020