心有多大舞台便有多大

Embrace changes, pursue excellence, share niceness.

equinox开发osgi时的一个小技巧:定义公用的jar文件.

一般在开发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的管理机制.

posted on 2008-05-29 19:33 pony 阅读(2733) 评论(3)  编辑  收藏 所属分类: Java

评论

# re: equinox开发osgi时的一个小技巧:定义公用的jar文件. 2008-05-30 09:31 迟来的兵

其实可以不需要修改人家的东西,我们可以把依赖的每一个jar包都做成bundle,把需要的包export出去,就像eclipse那样。不过需要把这些jar包放在一起管理,避免重复制作bundle。  回复  更多评论   

# re: equinox开发osgi时的一个小技巧:定义公用的jar文件. 2008-05-30 10:19 Link

同意楼上的,公用的类库可以做成一个Bundle,在Bundle中把每个包都Export出来,这样Hacker OSGi本身,感觉有点不妥。  回复  更多评论   

# re: equinox开发osgi时的一个小技巧:定义公用的jar文件. 2008-05-30 13:40 Always BaNg.

这样是不是太麻烦了一点?如果下一版本Equinox不这么干你的岂不是不兼容了?

写个批处理,把所有公用的jar打到一个jar包,然后转换jar为bundle,岂不更好?

或者在Eclipse的向导:Plug-in Development中有一个向导就是
Plug-in from existing JAR archives

我都是这么干的:)  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: