是不是隻是將META-INF/MANIFEST.MF更新爲插件osgi項目(如果它不是已經?)的情況。它應該看起來像這樣:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: My-plugin
Bundle-SymbolicName: com.mycompany.mypluginname
Bundle-Version: 1.0.0
Bundle-Vendor: MyCompany
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Service-Component:
Import-Package: org.apache.log4j;version="1.2.14" (, separated etc)
Export-Package: com.mycompany.mypluginname.myapipackage;version="1.0.0"
然後很好地省略.internal包。該平臺應該完成剩下的工作。順便說一句,你可以使用Import-Package:在任何依賴包中,插件等,而不是依賴於jar/project(這是舊的,糟糕的方式,不工作 - 就像你發現)。
這給你大量的代碼依賴關係的解耦。如果您決定您的插件代碼應該屬於不同的jar/bundle,那麼您只需移動單個軟件包,並使新軟件包/插件將其導出。由於客戶端軟件包只是從「雲」(雲作爲OSGi平臺)導入軟件包,因此您可以更自由地移動代碼。
注意:正如評論中提到的,你不需要在OSGi中運行你的應用程序來獲得這個「好處」。 Eclipse可以在OSGi包的限制下編譯它的代碼,並且你的構建/服務器可以在「未受保護的世界」中運行。例如OSGi清單不對第三方(希望使用.internal)強制執行任何操作,但向需要它們的用戶提供「通知」和限制。
這就是我現在要做的,雖然我的一些插件還包含我在服務器代碼中使用的代碼,而不是通過OGSI。 – Uri 2009-02-16 00:46:08
沒有什麼能阻止你設置eclipse來爲服務器開發使用OSGi信息。運行時類路徑和構建腳本可以保持原樣。例如爲您的客戶端罐添加OSGi清單。它實際上並沒有傷害任何東西...... – Stephen 2009-02-16 02:07:52