2012-12-10 13 views
0

我維持依賴於OSGi和Maven的在一個名爲org.osgi-foundation-1.0.0.jar罐子似乎包含相同類的JDK核心運行時的一部分,比如拉一個Web應用程序:爲什麼org.osgi.foundation-1.0.0.jar中的JDK 1.5核心運行庫看起來完全相同?

java.util.\*; 
java.io.\*; 

等等等等。

這似乎很奇怪,我不得不問爲什麼這是必要的。此外,我的Web應用程序未能在JBoss 6上部署,因爲這些是第三方庫的「非法包名」。

org.osgi-foundation-1.0.0.jar的用途是什麼?有必要嗎?

+0

谷歌顯示,這個jar似乎[特定於Apache Felix](http://mvnrepository.com/artifact/org.apache.felix/org.osgi.foundation/1.0.0)。你應該檢查它的位置。理想情況下,你的應用程序不應該依賴於特定的OSGi框架。使您的應用程序取決於['org.osgi:org.osgi.core'](http://mvnrepository.com/artifact/org.osgi/org.osgi.core)等。 –

+0

查看其他答案...基礎是一個執行環境,以確保您不會意外地針對錯誤的jdk進行編譯。這主要與嵌入式和希望在較低版本的虛擬機上運行的人員相關。 –

回答

1

org.osgi.foundation是一個包含Foundation執行環境中所有類的包(參見OSGi彙編規範的第999節)。

簡而言之,執行環境是應該從框架中獲得的一組類。他們被分組在配置文件中,如JavaMEOSGi/Minimum。軟件包可以在他們的清單中表達他們對給定執行環境的使用,並確保他們只會在平臺上啓動,例如,提供AWT。

您發現的org.osgi.foundation包代表這些環境之一。它僅包含存根類,因此僅在編譯期間使用。

因此,如果Maven作爲編譯依賴項引入了bundle,那很好,但它不應該與您的應用程序一起部署。

+0

這是一個執行環境。請參閱彙編規範的第999節。它包含存根類(沒有方法體)。你可以對它進行編譯,但不能在運行時使用。所以它應該只是一個編譯時依賴項,替代了普通的javac bootclasspath。 –

+0

我錯過了Compendium部分999的參考資料,謝謝!我會爲此更新我的答案。 –

相關問題