一般在开发java项目的时候,我们会有一些公用的jar文件,在开发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文件(如果你开发osgi使用的是其它J2SE环境,请编辑相应的文件)
这个文件中定义了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中,一般你可以系统环境变量的classpath中加入这个jar文件路径.
3.把第1步中修改后的osgi jar文件拷贝到eclipse的plugins目录下,重新启动eclipse
4.打开一个bundle的MANIFEST.MF文件,在dependencies项中,你就可以在imported packages中导入刚才定义的demo包了.
虽然这样做可以做到在各个bundle间共享一些jar文件,但这些公用的jar一定要确认清楚,否则会给以后的开发带来麻烦!因为之所以用osgi来开发,就是为了使用它的class loader的管理机制.