开发者如何制作Java项目'extendable'?
How to make a Java project 'extendable' by developers?
我正在开发服务器引擎,但我不确定以何种形式分发它。它非常模块化,它使用 interfaces/abstract 类.
应该是:
一个库(没有入口点,自己写main()
然后调用new Server().setSomeHandler(myHandler).run()
)
一个二进制文件(带有配置文件的可执行入口点,您可以在其中注入带有处理程序的 JAR)
还有别的吗?
基本上,开发人员应该能够完全扩展或更改服务器的工作方式。我不喜欢把它变成一个库的想法,因为它本身应该是一个平台,一个完整的服务器系统。
提供编程方式比仅提供可执行文件更通用。这两种方式并不相互排斥。毕竟,即使开发人员提供了一个处理程序,在内部您可能仍然需要在您的示例中调用类似 setter 的内容来实际使用该处理程序。公开 API 应该不会太困难。如果需要,您仍然可以提供一个小型启动器应用程序来加载一些配置文件并将其包装在一些 API 调用中。
更重要的问题是,是否存在预定义的扩展点,开发人员可以在其中插入他们自己的实现,或者一切是否完全模块化和可交换?
要以简单的方式提供预定义接口的实现,您可以使用 ServiceLoader/SPI 机制。你可以用它构建一个基本的插件系统。
如果你想做一个平台,OSGi之类的似乎更合适。在这里您可以为细粒度 components/services 定义 APIs/SPIs。然后开发人员可以提供他们自己的模块来扩展服务器甚至替换您的默认模块。
我正在开发服务器引擎,但我不确定以何种形式分发它。它非常模块化,它使用 interfaces/abstract 类.
应该是:
一个库(没有入口点,自己写
main()
然后调用new Server().setSomeHandler(myHandler).run()
)一个二进制文件(带有配置文件的可执行入口点,您可以在其中注入带有处理程序的 JAR)
还有别的吗?
基本上,开发人员应该能够完全扩展或更改服务器的工作方式。我不喜欢把它变成一个库的想法,因为它本身应该是一个平台,一个完整的服务器系统。
提供编程方式比仅提供可执行文件更通用。这两种方式并不相互排斥。毕竟,即使开发人员提供了一个处理程序,在内部您可能仍然需要在您的示例中调用类似 setter 的内容来实际使用该处理程序。公开 API 应该不会太困难。如果需要,您仍然可以提供一个小型启动器应用程序来加载一些配置文件并将其包装在一些 API 调用中。
更重要的问题是,是否存在预定义的扩展点,开发人员可以在其中插入他们自己的实现,或者一切是否完全模块化和可交换?
要以简单的方式提供预定义接口的实现,您可以使用 ServiceLoader/SPI 机制。你可以用它构建一个基本的插件系统。
如果你想做一个平台,OSGi之类的似乎更合适。在这里您可以为细粒度 components/services 定义 APIs/SPIs。然后开发人员可以提供他们自己的模块来扩展服务器甚至替换您的默认模块。