我一直在尝试制作自己的插件系统。我有2个独立的项目。一个用于执行加载的主“程序”,另一个用于我的第一个插件的项目。插件实现了IPlugin。我在主项目中使用它来获取我的加载方法,并且在插件项目中我也可以为我的类插件实现它们。
然后我将插件项目转换为jar文件,并尝试在运行时通过主项目加载它。问题是这样:在主项目中它加载很好,但是当我尝试创建一个实例,并将其作为IPlugin投射时(因为我可以列出当前加载的所有插件),它说它不能等于IPlugin。我能想到的唯一原因是它没有认识到我使用的2个IPlugin接口(每个项目中有1个)是相同的接口。如何在它们之间“链接”IPlugin?我应该将它放在自己的jar文件中,然后将其包含在每个项目中吗?
我正在使用BlueJ进行开发。
对不起,如果我没有任何意义......我正试图尽我所能解释这种情况。如果您需要澄清,请告诉我。谢谢!
更新
我尝试了一个仅用于IPlugin的jar文件,然后在两个项目中使用了该JAR。现在我得到一个'java.lang.noClassDefFoundError:IPlugin(在java.lang.ClassLoader中)它编译很好,识别IPlugin等,但在运行时似乎它不知道它是什么......
当我调用URLClassLoader.loadClass()方法
时会发生这种情况答案 0 :(得分:3)
您的插件项目(和jar文件)不应包含IPlugin
接口(或两者都需要的任何其他类)。相反,在编译插件时,将已经为主项目编译的那个编译成编译器类路径,并让插件类加载器将主类加载器作为父类加载器。
答案 1 :(得分:1)
您应该只有一个IPlugin接口。你如何打包它取决于你。如果你把它放在一个可以正常工作的独立罐子里。