如何在多个Eclipse插件项目中添加相同extension point?及报错求助
嘿,作为插件开发新手遇到这些问题太正常了,别着急,咱们一步步来解决这两个问题:
先解决循环依赖(Cycle was detected)问题
这个错误的核心是你的第二个plugin项目和licensing项目之间形成了互相依赖的闭环——简单说就是A依赖B,同时B又依赖A,Eclipse的构建系统无法处理这种情况。你可以按照下面的步骤排查和修复:
- 首先检查项目依赖关系:右键第二个plugin项目,选择
Properties→Java Build Path→Projects标签,看看是不是把licensing项目加进了依赖;同时再打开licensing项目的相同路径,检查它是不是也依赖了这个plugin项目。如果是这样,必须砍掉其中一个方向的依赖。 - 回忆扩展点的实现逻辑:licensing项目定义了扩展点,你的plugin项目应该是实现这个扩展点,而不是让licensing反过来依赖plugin的代码。正常的扩展点交互应该是:licensing提供扩展点的接口(比如一个Java接口),plugin实现这个接口并在自己的MANIFEST里注册扩展,licensing通过扩展点框架去发现和调用这些实现,全程不需要licensing直接引用plugin的类。如果你的licensing项目里写了引用这个plugin类的代码,那肯定会出问题,得把这部分改成通过扩展点的标准方式获取实现。
- 用OSGi依赖替代普通Java依赖:插件开发里尽量别用
Java Build Path的项目依赖,而是在plugin的MANIFEST.MF里用Require-Bundle或者Import-Package来声明对licensing的依赖,这样能更清晰地管理依赖关系,也不容易出现循环。
再处理Access restriction错误
这个错误一般是因为代码引用了不允许访问的API,或者依赖的包没有正确导出/导入,试试这些方法:
- 检查包的导出和导入:打开licensing项目的
MANIFEST.MF,切换到Runtime标签,看看你在plugin里需要用到的包是不是已经添加到Export-Package列表里了;然后打开第二个plugin的MANIFEST.MF,在Dependencies标签里,确认已经通过Import-Package导入了这些导出的包。如果包没导出,plugin就没法合法访问,自然会报访问限制。 - 调整JDK访问规则(如果涉及JDK API):如果错误提示是关于JDK里的类,右键plugin项目 →
Properties→Java Build Path→Libraries,展开JRE System Library,选择Access rules点击Edit,添加一条规则:规则类型选Accessible,路径填你需要访问的包(比如com.sun.**,但尽量精准,别直接用**允许所有)。 - 检查插件依赖的正确性:确保你是通过PDE的工具来添加依赖,比如在plugin的
MANIFEST.MF的Dependencies标签里点击Add来选择licensing插件,而不是手动修改构建路径,这样能避免很多访问权限的问题。
额外的新手友好建议
- 多用PDE的向导:创建扩展、添加依赖这些操作,尽量用Eclipse PDE提供的向导(比如
New > Extension、MANIFEST.MF里的可视化编辑页),别手动编辑配置文件,能减少很多低级错误。 - 检查Feature项目配置:打开你的Feature项目的
feature.xml,确保三个plugin项目和licensing项目都正确添加到了Plug-ins列表里,并且它们之间的依赖关系在Feature里是一致的。
内容的提问来源于stack exchange,提问作者Arunkumar
相关产品推荐
相关产品推荐

