向服务提供者公开Java服务提供者接口

向服务提供者公开Java服务提供者接口,java,service-provider,Java,Service Provider,我正在尝试为插件/应用程序创建一个框架,我想我已经决定使用Java中的服务提供者接口(ServiceProviderInterface,SPI)来实现这一点。最终的设想是,人们可以下载插件(比如应用商店),然后将jar放入文件夹中,然后使用现有的程序 因此,我有一个类PluginInterface,它将成为我的SPI。我希望所有插件都能实现这个类(它有一些基本方法,比如doesacept,handle,等等)。由于第三方将创建服务提供商,我如何让他们在代码中引用这个Java接口(这样他们就可以实

我正在尝试为插件/应用程序创建一个框架,我想我已经决定使用Java中的服务提供者接口(ServiceProviderInterface,SPI)来实现这一点。最终的设想是,人们可以下载插件(比如应用商店),然后将jar放入文件夹中,然后使用现有的程序


因此,我有一个类
PluginInterface
,它将成为我的SPI。我希望所有插件都能实现这个类(它有一些基本方法,比如
doesacept
handle
,等等)。由于第三方将创建服务提供商,我如何让他们在代码中引用这个Java接口(这样他们就可以实现它),没有实际提供主应用程序的源代码?

创建两个JAR api和impl,将应用程序放入impl中,并将需要与第三方开发人员共享的代码放入api中


示例:jaxb-api.jar和jaxb impl.jar

知道如何用一些选定的代码(在Intellij或命令行中)创建jar吗?您需要创建一个多maven项目。在Java中,有两个项目api和impl.Maven不是必需的选项,但这不是主题;-)为了正确地打包jar,关键是要尊重……例如,jaxb-impl.jar应该包含一个META-INF/services文件夹,其中包含指定实现接口的适当文件。在您的情况下,应该有一个以接口命名的文本文件:META-INF/services/PluginInterface。内容中有一行是实现类的全名。。。