2010-04-25 55 views
2

要使用諸如javac之類的工具從源代碼生成包,您需要爲其提供線性類路徑。不幸的是,它不會在某些情況下,從一個角度OSGi的點工作仍完全合法:javac是否足以構建OSGi包?

  • 依賴與他們嵌入JAR;

  • 不同依賴包含的相同包。

因爲javac不理解OSGi元數據,所以我不能簡單地只是在類路徑中的依賴關係。更好的包裝紋理方法似乎是必要的。

在自動化過程(持續集成)中使用OSGi的人如何解決這個問題?奇怪的是,Web上有很多關於如何創建bundle JAR(創建元數據,創建JAR)的資源,前提是您需要將類/內部JAR放入其中,但關於如何實際獲取這些類的信息很少。

讓我們舉個例子:我的包需要兩個其他包來編譯,它們都包含Xerces作爲嵌入式JAR,但是包含兩個不同和不兼容的版本。這不是一個問題,因爲只有其中一個導出一些xerces包,我的包依次導入。也許不是一個很乾淨的情況,但是可以在OSGi容器中「有法可依」地發生的事情沒有問題。

現在,我該如何編譯它?我不能把這兩個依賴關係放在我的類路徑中(javac中不會找到嵌入的Xerces JAR),我也不能將它們弄平(兩個版本的Xerces會發生碰撞,也許沒有導出的將是第一個) 。如果ony解決方案是在包級別創建「classpath」,而不是完整的包級別,則javac根本不可用。

回答

0

Java類由javac編譯,這意味着:爲了編譯一個包,你必須在類路徑中包含所有依賴的包。 你說得對,javac不是OSGi意識到的。所以你需要其他自動化工具。

要了解如何實現這一目標,您可以查看實現OSGi R4服務平臺的Felix

OSGi包通常由eclipse支持的ant或maven打包。 使用eclipse在項目設置選項卡「plugin-dependencies」中配置依賴關係。

一個很好的例子,如何建立在Eclipse OSGi的項目是Sherlog

0

javac的是建立任何Java文件到一個類文件要求。 OSGI捆綁包就像任何其他的Java綁定歸檔文件一樣,包含一系列類文件和一個清單,其中包含JAR文件中的幾個強制性自解釋條目。

如果你想讓你的bundle正常工作,那麼它必須滿足它的所有依賴。如果您希望導出其某些服務或類別,則還必須以類似的方式聲明這些服務或類別。一旦理解了這些概念,歸檔文件中的OSGI特定頭文件就有意義。

+0

也許我錯了,但創造了應付的OSGi(m2eclipse的或來自菲利克斯一個)Maven插件仍然依靠的javac到底,給它一個線性的classpath喂上。 – Chatanga 2010-04-25 12:35:11