61

我们正在尝试确定如何为我们正在实现的服务实现一个简单的插件框架,该框架允许“插入”不同类型的计算器。

在阅读了一些关于 Java 插件框架的帖子之后,最常见的选项似乎是:

OSGI 似乎超出了我们的需要。

“滚动你自己的”是可以的,但重用一个公共库会很好。

所以我们只需要 JPF 和 JSPF。JPF 似乎不再处于积极开发中。

JSPF 看起来非常简单,而且确实是我们所需要的。但是我没有听到太多关于它的消息。我只在 StackOverflow 上看到过一篇关于它的帖子。有没有其他人对 JSPF 有任何经验?或者对此设计选择有任何其他意见?


更新:这不一定有正确的答案.. 但是我们将采用 Pavol 的想法,因为我们只需要一个非常非常简单的解决方案。感谢 EoH 的精彩指南。

4

3 回答 3

43

(免责声明:我是 JSPF 的作者,所以最好对我的评论持保留态度 ;-)

我开始使用 JSPF 的主要原因是因为我遇到了和你现在一样的问题:我正在寻找一个简单的解决方案来使我的论文项目 1)可扩展,2)给它一个或多或少清晰的代码结构。

我没有决定使用现有框架的原因是因为它们中的大多数一开始就非常重量级,以至于我在阅读文档时迷失了方向,几乎忘记了我最初的任务。所以,根据你的说法

我们正在尝试确定如何为我们正在实现的服务实现一个简单的插件框架,该框架允许“插入”不同类型的计算器。

我认为您可以试一试 JSPF,看看您在一两个小时内能走多远。

但是,最终决定还取决于您到底想要实现什么,以及具体情况。

我从许多人那里听到了积极的结果,他们一直在使用它来构建他们的项目或在他们的项目中加载插件。另一方面,我也认识我们部门的一个人,因为他觉得这与他的编程风格不太协调,所以又把它扔掉了。

所以,为了简短地回答你的问题(而且肯定是有偏见的),我会使用

用于项目和团队的OSGi

  • 很大,有很多人在做
  • 这证明了建立基础设施的开销是合理的
  • 需要提供的具体服务

项目和团队的JPF

  • 中等规模(?,老实说,我不确定他们所针对的项目/团队规模)
  • 他们需要更多结构化的工具来组织他们的代码,比如 XML 配置、详细的插件生命周期管理、可扩展插件......

适用于项目和团队的JSPF

  • 体积小,遵循敏捷范
  • 只需要开箱即用的东西,无需配置或设置
  • 愿意为了简单而牺牲一些功能

我希望您找到最适合您的场景的插件框架。而且,无论您尝试什么,我都会很高兴听到您的结果。

于 2009-11-02T11:48:17.300 回答
30

如果您计划只有一个(或几个)不太复杂的“扩展点”,那么一个定义明确的 SPI 和一个配置可能就足够了。无需使用插件框架。

通过配置,我的意思是一些机制来找到你的插件。例如,类似META-INF/services/或只是在配置文件中列出您的插件。

更多详情(根据要求):

SPI =服务提供者接口,“API 的实现者端等价物”。要了解更多信息,请尝试搜索 API 和 SPI 之间的区别。然而,在这种情况下,它只是一个由插件实现的接口的花哨术语(即定义插件的合同)。

Ethan Nicholas 撰写的一篇不错的简短文章“创建服务提供者接口”描述了如何以与在 Java 平台本身的几个部分中完成的类似方式创建您自己的 SPI。

META-INF/services/可以看作是创建 SPI 的一种更通用的方法。更多信息可以在JAR 文件规范的相应部分中找到。

于 2009-10-25T11:11:45.633 回答
2

如果您需要一个非常简单的解决方案,请尝试jin-plugin。它是 Java 和 PHP 的简约插件框架。

于 2010-10-19T23:20:15.497 回答