一般在開發(fā)java項目的時候,我們會有一些公用的jar文件,在開發(fā)bundle的時候,如果把這些jar文件重復的在各bundle中復制的話,即煩瑣,又容易出錯.
今天我琢磨出一個方法,雖然不敢說這么做是否是正確方法,但至少解決了正確的問題(用錯誤的方法解決正確的事總比用正確的方法解決錯誤的事好!哈哈).下面是解決的方法:
1.修改org.eclipse.osgi.xxxxxx.jar文件
a.把文件中META-INF目錄中的ECLIPSE.SF,ECLIPSE.RSA文件刪除掉(因為jar文件是通過SF文件來保證jar中的內容不被篡改!如果不了解這個的,可以去查下jar的詳細說明)
b.修改jar根目錄下的J2SE-1.5.profile文件(如果你開發(fā)osgi使用的是其它J2SE環(huán)境,請編輯相應的文件)
這個文件中定義了osgi啟動時的org.osgi.framework.system.packages屬性,因為osgi中每個bundle都有自己獨立的classpath,那么在各個bundle之間共享的class就是通過這個屬性中定義的包來指定的.(如果不了解osgi的class載入機制,請參閱osgi的入門教材!),你可以在文件中的這個屬性值上加入自己的包,例如:
........
org.ietf.jgss,\
org.omg.*,\
org.w3c.*,\
org.xml.*,\
sun.*,\
demo.* //這一行是新增加的包
2.把demo.*所在的jar文件加入到啟動osgi的classpath中,一般你可以系統(tǒng)環(huán)境變量的classpath中加入這個jar文件路徑.
3.把第1步中修改后的osgi jar文件拷貝到eclipse的plugins目錄下,重新啟動eclipse
4.打開一個bundle的MANIFEST.MF文件,在dependencies項中,你就可以在imported packages中導入剛才定義的demo包了.
雖然這樣做可以做到在各個bundle間共享一些jar文件,但這些公用的jar一定要確認清楚,否則會給以后的開發(fā)帶來麻煩!因為之所以用osgi來開發(fā),就是為了使用它的class loader的管理機制.