作者:痞子343 | 来源:互联网 | 2023-09-14 19:09
由于项目需要,我需要做一个RCP项目,那就自然而然的要用到org.eclipse.core.runtime.applications这个扩展点了,因为这个是RCP的核心啊,这个扩展点定
由于项目需要,我需要做一个RCP项目,那就自然而然的要用到org.eclipse.core.runtime.applications这个扩展点了,因为这个是RCP的核心啊,这个扩展点定义的application类就是RCP应用的主程序啊,然而,在运用过程中,我郁闷了。
问题描述:我现在在做一个RCP项目,project名字叫做CstnetSPS,这个过程中我新建了一个product configuration文件xxx.product,这个文件中就是配置了一个product的id,以及application属性,但是这个地方配置application的时候是下拉菜单,就是eclipse会根据plugin.xml的内容来给出一些选项,比如我plugin.xml中定义了一个application,它的id叫application的话,那么在xxx.product配置的时候,下拉菜单中就有一项CstnetSPS.application的选项,于是选上这个选项以后,在配置一下所需要的包,就可以launch the product了。
但是奇怪的是:当我在plugin.xml中将application的id定义为我自己设计的时候,比如:cn.cstnet.cstnetsps.application,于是在xxx.product配置相应的显示就是选择CstnetSPS.cn.cstnet.cstnetsps.application了。但是单击launch the product以后出现了异常,说是java.lang.RuntimeException: Application "CstnetSPS.cn.cstnet.cstnetsps.application"
could not be found in the registry. The applications available are: cn.cstnet.cstnetsps.application
我就觉得很奇怪,是不是定义application的id的时候不可以中间有“.”啊?
上面是问题出现时我记录下来的,可能不太清楚,我解释一下,就是说,在eclipse plugin project中,plugin.xml中定义org.eclipse.core.runtime.applications扩展点的时候,就需要定义一个application项,如:
id="application"
point="org.eclipse.core.runtime.applications">
同时,在新建product configuration file的时候呢,product configuration editor会图形化提示用户配置一个product项,包括id,name,以及application属性。这段就对应于plugin.xml中的
id="product"
point="org.eclipse.core.runtime.products">
application="CstnetSPS.application"
name="cstnetsps"/>
有id,name,以及application。那么这两个地方的application,都需要关联到同一个实现类上去,必须一致,在这里eclipse默认的实现是:在application扩展点中定义其id的同时,也分配上它的实现类,这样就关联上了实现类和id,而在product扩展点中,application属性为了也指向上面定义的同一个实现类,就将该属性定义为:工程名+application的id号。如上:工程名为CstnetSPS,application扩展点application的id是application,于是有product扩展点中application属性的内容就是CstnetSPS.applicaiton了。这样是能够正常执行的,不管是将project以eclipse application的方式启动,还是以product的方式启动,都能正常运行。
但是,正如同我前面所提出的问题,我在写plugin.xml的时候,当写到application扩展点给application定义id的时候,我就习惯性的把扩展点定义为cn.cstnet.cstnetsps.application。结果在product扩展点中相应的application属性就变为CstnetSPS.cn.cstnet.cstnetsps.application了,然而点击launch the product以后,抛出前面给出异常错误,而只有手动更改xxx.product文件,将application属性修改为cn.cstnet.cstnetsps.application(去掉前面的工程名),工程又可以以product的方式启动了,但是仍然无法以eclipse application的方式启动。
在请教了几个同事以后,我大胆猜测:org.eclipse.core.runtime.applications扩展点中application的id号只能定义为单个的单词,否则就会出现我出现的错误。欢迎指正!!!!
要是我的猜测是对的话,那到底是我弱?还是eclipse弱?难道定义一个id还要限定只能用一个单词???????
这样是不是对用户不友好?????