我正在编写Java应用程序的插件API,其想法是最终第三方将为应用程序提供自己的插件扩展,而用户所需要做的就是将插件jar放入应用程序的plugins目录中。对于不耐烦的人,简而言之,我的问题是,当该插件与系统上使用的API不同时,如何处理可能的版本冲突。有关我的处境和我的想法,请参阅下文。
我已经阅读了一些使用服务提供者接口的文章,并且对此有所帮助。考虑如何处理不同的版本组合时会出现问题。
我知道在添加到API时添加扩展接口而不是更改现有接口的技术(例如,具有MyInterface的API 1.0,具有新方法的My1.1添加MyInterface2的API 1.1)。使用这种技术,如果用户拥有最新的API,则较旧的插件应该可以正常工作,但是如果用户拥有较旧的API和较新的插件,会发生什么情况?
因此,作为一个示例,用户仅具有MyInterface的API 1.0,但安装了根据API 1.1编译的二进制插件,其中提供程序类实现了MyInterface2。虽然应用程序只能使用MyInterface调用插件,但是如果插件内部调用MyInterface2会发生什么呢?这是否会导致错误或异常以及何时发生(即,IE。何时加载类或何时调用MyInterface2中的方法)。另外,这个标准是否适用于JVM,或者根据所使用的JVM是否有所不同?
最后,使用插件框架会更好,可以检查版本要求吗?搜索互联网,我在github上找到了PF4J。快速浏览一下源代码似乎表明它可能支持某种版本检查。