根據OSGi文檔,OSGi旨在幫助防止ClassPath問題。OSGi:如何確保類路徑的一致性?
例如,從「OSGi的在行動」:啓動應用程序時,因爲 類路徑是不正確的
ClassNotFoundExceptions。在允許代碼執行之前,OSGi可以通過確保代碼 滿足相關性來提供幫助。
然而,由於我們已將Java應用程序的OSGi,我看到更多的ClassNotFoundExceptions,尤其是NoClassDefFoundErrors比以往任何時候。之前加載正常的類不會被OSGI類加載器找到,更糟糕的是:在運行時會出現錯誤,這意味着除非通過手動測試應用程序的每個角落,否則無法輕鬆檢查它。
例如,我們的應用程序在OSGi下運行得很開心,但我們收到了Beta測試人員的報告,他們無法將文檔導出爲PDF。事實上,當我看着它,我發現這個功能引起記錄異常:
java.lang.NoClassDefFoundError: org/w3c/dom/Node
所以,是的OSGi實際上創造了更多的類路徑的問題比它解決的?
更重要的是:我如何測試我的類路徑是否一致,以及所有必要的導入包聲明等。之前我在錯誤報告中瞭解它們?
「除了通過手動測試應用程序的每一個角落」 - 嗯自動化測試? (這同樣適用於任何應用程序)如果您在遷移之前已經有測試套件,那麼您在測試人員發現之前就已經發現了這些錯誤。爲了測試你的bundle是否正確連接,你需要做一些集成測試 - 我們使用Pax Exam來進行測試,並且有很短的集成測試(當前包和它的合作者)以及一些較長的端到端測試(測試整個應用程序)。 – earcam